نمایش نتایج 1 تا 9 از 9

نام تاپیک: اتصال به بانک sql با استفاده از کلاس ها

  1. #1
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    اتصال به بانک sql با استفاده از کلاس ها

    سلام،من این ترم پروژه وب دارم و استادمون خواسته که برای اتصال به بانک از یک کلاس استفاده کنیم(یعنی از روش معمولی که کدهای اتصال رو داخل یک دکمه مینویسیم استفاده نکنیم)،ممنون میشم که کدهای مربوط به اتصال به بانک sql با استفاده از یک کلاس رو برام بذارید،اگه میشه توضیحاتی درباره کدها هم بفرمایید.

  2. #2
    کاربر دائمی آواتار uniqueboy_ara
    تاریخ عضویت
    فروردین 1389
    محل زندگی
    تهران
    پست
    420

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    من خودم از این کلاس استفاده می کنم که شامل 4تا تابع هست و همه کارایی که میخوام رو انجام میده
    1. دستورات بدون خروجی ( SELECT )
    2.دستورات خروجی دار ( INSERT, UPDATE, DELETE )
    3.اجرای دستور SELECT با خروجی DataView برای استفاده مستقیم در دیتا گرید
    4.اجرای دستور SELECT با خروجی DataSet برای استفاده مستقیم در CrystalReports


    class DB_SQL
    {
    public static string Conection_S = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|DB_SELL_SYSTEM_Data.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";//bartebghe tanzimate SQL taghir mikonad

    public void EXEC(string sql)
    {

    SqlConnection con = new SqlConnection();
    con.ConnectionString = Conection_S;
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText = sql;

    con.Open();
    com.ExecuteNonQuery();
    con.Close();
    }

    public SqlDataReader select(string sql)
    {
    SqlConnection con = new SqlConnection();
    con.ConnectionString = Conection_S;
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText = sql;
    SqlDataReader dr;
    con.Open();
    dr = com.ExecuteReader(CommandBehavior.CloseConnection) ;
    dr.Read();
    return dr;
    }

    public DataView data_update_manual(string sql)
    {
    SqlConnection con = new SqlConnection();
    con.ConnectionString = Conection_S;

    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter = new SqlDataAdapter(sql,con);
    adapter.Fill(ds);
    con.Close();

    DataView dv = new DataView(ds.Tables[0]);
    return dv;
    }

    public DataSet select_r(string sql)
    {
    SqlConnection con = new SqlConnection();
    con.ConnectionString = Conection_S;

    DataSet ds = new DataSet();
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter = new SqlDataAdapter(sql, con);
    adapter.Fill(ds);
    con.Close();

    return ds;
    }

    }

  3. #3
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    با تشکر از دوست عزیزم uniqueboy_ara،
    معمولا برنامه های دیتابیسی، از کلاسهایی مثل کلاس طراحی شده توسط شما، زیاد استفاده میکنن. چند بهتره این کلاسها، کاملا optimum باشن.



    پس چند تا پیشنهاد در همین راستا، در مورد کدهای فوق دارم که عرض میکنم.
    • این کلاس احتمالا بارها در طول اجرای برنامه instantiate میشه. واسه همین به هیچ عنوان نباید garbage ایجاد کنه. متاسفانه اکثر کلاسهای موجود در ADO.NET، تماما Disposable هستن. پس ترجیحا باید بعد از استفاده، Dispose بشن. برای مثال، من کد select رو به ترتیب زیر، تغییر میدم:
    public DataSet FillDataSet(string sql)
    {
    DataSet result;
    using (var con = new SqlConnection(Conection_S))
    {
    result = new DataSet();
    using (var adapter = new SqlDataAdapter(sql, con))
    adapter.Fill(result);
    con.Close();
    }
    return result;
    }



    موارد مورد توجه:
    1. کلاسهای SqlConnection، SqlDataAdatper و همچنین DataSet همگی Disposable هستن، ولی چ.ن مقدار بازگشتی متد، DataSet هست، caller، موظف به dispose اونه نه متد ما. ولی برای دو مورد دیگه، من این کار رو با قرار دادنشون در using، انجام دادم.
    2. متغییر adapter، در هنگام تعریف، یک با مقداردهی میشه، در خط بعد بلافاصله مجددا مقدار میگیره، و مقدار قبلی خودش رو در حافظه باقی میذاره. (طبق عرایض بالا) چون Disposable هست، Garbage Collector هم از حافظه حذفش نمیکنه.
    3. ctor کلاس SqlConnection، میتونه ConnectionString رو بگیره، نیازی به مقداردهی اون در خط مجزا نیست.

    • مورد بعدی، ConnectionString هست. در صورتیکه اون رو تبدیل به property کنید تا بشه کلاس رو در برنامه های دیگه هم بکار برد، بهتره. (ترجیحا در Ctor مقدار بگیره بهتره)
    • مورد آخر و کمی پیچیده تر اینکه بخاطر Connection Pooling، بهتره بجای ConnectionString، خود SqlConnection با ConnectionStringِ دریاقتی در ctor مقدار بگیره تا performance برنامه بالا بره. در این صورت، ترجیحا خود کلاس هم بهتره disposable باشه تا هنگام Dispose کلاس، Connection هم dispose بشه.
    در آخر، کلاس فوق رو من به این صورت تغییر میدم. (البته با اجازه و احترام به صاحب اصلی):
    public class DbSql : IDisposable
    {
    private readonly SqlConnection _Connection;
    public DbSql(string connectionstring)
    {
    this._Connection = new SqlConnection(connectionstring);
    }
    #region IDisposable Members
    public void Dispose()
    {
    if (this._Connection != null)
    this._Connection.Dispose();
    }
    #endregion
    public void Exec(string sql)
    {
    try
    {
    using (var com = new SqlCommand {Connection = this._Connection, CommandText = sql})
    {
    this._Connection.Open();
    com.ExecuteNonQuery();
    }
    }
    finally
    {
    this._Connection.Close();
    }
    }
    public SqlDataReader SelectReader(string sql)
    {
    SqlDataReader dr;
    using (var com = new SqlCommand {Connection = this._Connection, CommandText = sql})
    {
    this._Connection.Open();
    dr = com.ExecuteReader(CommandBehavior.CloseConnection) ;
    }
    dr.Read();
    return dr;
    }
    public DataView FillDataView(string sql)
    {
    try
    {
    DataView dv;
    using (var ds = new DataSet())
    {
    var adapter = new SqlDataAdapter(sql, this._Connection);
    adapter.Fill(ds);
    dv = new DataView(ds.Tables[0]);
    }
    return dv;
    }
    finally
    {
    this._Connection.Close();
    }
    }
    public DataSet FillDataSet(string sql)
    {
    try
    {
    var result = new DataSet();
    var adapter = new SqlDataAdapter(sql, this._Connection);
    adapter.Fill(result);
    return result;
    }
    finally
    {
    this._Connection.Close();
    }
    }
    }

  4. #4
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    ببینید دوستان عزیز،من فقط میخوام از طریق کلاس به sql وصل بشم،قصد درج و حذف و ... رو با استفاده از کلاس ها ندارم،تو حالت معمولی از عبارت زیر استفاده میکنیم:
    SqlConnection conn = 
    new SqlConnection("Data Source = (local);Initial Catalog=US_DB;Integrated Security=True");

    حالا سوال من اینه:به جای کد بالا،اگه بخوایم با استفاده از کلاس وصل بشیم باید چی بنویسیم و چطوری بنویسیم،تا الان این مدلی کار نکردم واسه همین ممنون میشم کامل توضیح بدید،تشکر از محبتتون.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    دوستان عزیز لطفا راهنمایی کنید.

  6. #6
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    والله راستش اصلا سوالت رو نمیفهمم

  7. #7
    کاربر دائمی
    تاریخ عضویت
    تیر 1389
    محل زندگی
    به جبر روزگار تهران هستم.
    پست
    2,718

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    مشکلی نیست،بیشتر توضیح میدم،ببینید استادمون گفته که یک کلاس بسازید و کدهای مربوط به اتصال به پایگاه داده sql را درون این کلاس بنویسید،اما برای درج و حذف و آپدیت و ... نیازی به استفاده از کلاس ها نیست،امیدوارم متوجه شده باشید.

  8. #8
    کاربر دائمی آواتار ali reza mansoori 2
    تاریخ عضویت
    تیر 1387
    محل زندگی
    پشت کامپیوتر
    پست
    732

    نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    دوستان نحوه استفاده از این کلاس رو توضیح بدید
    1. دستورات بدون خروجی ( SELECT )
    2.دستورات خروجی دار ( INSERT, UPDATE, DELETE )
    3.اجرای دستور SELECT با خروجی DataView برای استفاده مستقیم در دیتا گرید
    4.اجرای دستور SELECT با خروجی DataSet برای استفاده مستقیم در CrystalReports
    خیلی ممنون

  9. #9
    کاربر دائمی آواتار mohammad272005
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    تهران
    پست
    639

    Smile نقل قول: اتصال به بانک sql با استفاده از کلاس ها

    مثال:
    const string connectionstring = @"...";
    using (var db = new DbSql(connectionstring))
    {
    db.Exec("INSERT User (UserName, Password) VALUES (Admin, 1)");
    const string selectFromUser = "SELECT * FROM User";
    foreach (var user in db.SelectReader(selectFromUser))
    {
    }
    using (var dataSet = db.FillDataSet(selectFromUser))
    {
    Console.WriteLine("======");
    Console.WriteLine("{0,-20}\t{1}", "UserName", "Password");
    foreach (var row in dataSet.Tables[0].Select())
    Console.WriteLine("{0,-20}\t{1}", row["UserName"], row["Password"]);
    }
    db.Exec("DELETE FROM User");
    }


    البته من ابن کد رو بدون Visual Studio نوشتم. امیدوارم درست باشه

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •