سلام
خواستم بپرسم تفاوت بین این دو ابجکت چیست؟ SqlConnection و IDbConnection
هر کدوم چه مزایا و معایبی دارند ؟ و در حالت کلی کدوم بهتر هست؟
سلام
خواستم بپرسم تفاوت بین این دو ابجکت چیست؟ SqlConnection و IDbConnection
هر کدوم چه مزایا و معایبی دارند ؟ و در حالت کلی کدوم بهتر هست؟
IDbConnection یک Interface هست که شمای کلی از متدهایی که یک Connection برای یک Provider فراهم می کنه رو ارائه میده.
استفاده از این دست اینترفیس ها برای مواقعی خوب هست که نیاز به اتصال به چند نوع پایگاه داده ی مختلف رو داشته باشی.
در حقیقت برای ایجاد Custom Provider
روش تمیز این کار بدین گونه است که یک متد عمومی برای تمامی Provider ها تعریف می کنی و برای استفاده از این متد، Provider مخصوص خودش رو فراخوانی میکنی.
در ذیل، یک تکه کد ساده برای بازیابی داده ها از جدول myTable که با استفاده از Interface ها پیاده سازی شده میبینی:
private void GetData(IDbConnection Cnn, IDbDataAdapter DA)
{
IDbCommand Cmd = Cnn.CreateCommand();
Cmd.CommandText = "SELECT * FROM myTable";
DA.SelectCommand = Cmd;
DataSet DS = new DataSet();
DA.Fill(DS, "myTable");
GridView.DataSource = DS.Tables["myTable"].DefaultView;
GridView.DataBind();
}
در روال فوق نوع Provider مشخص نشده.
فرض کن که من قصد دارم از روال فوق برای بازیابی داده ها از یک دیتابیس SQL Server استفاده کنم.
به شکل زیر عمل میکنم:
SqlConnection Cnn = new SqlConnection("myConnectionString");
SqlDataAdapter DA = new SqlDataAdapter();
GetData(Cnn, DA);
و یا برای اتصال به یک دیتابیس از نوع OLEDB:
OleDbConnection Cnn = new OleDbConnection("myConnectionString");
OleDbDataAdapter DA = new OleDbDataAdapter();
GetData(Cnn, DA);
موفق باشید.
جناب راد ممنون
پس با این توضیحی که دادید چون من فقط از دیتابیس sqlserver استفاده می کنم همون sqlcommand تنها کافیه و نیازی نیست که از idbcommand استفاده بشه ؟
یک سوال دیگه هم داشتم (نخواستم تاپیک جدا بزنم)
در بعضی مثال ها دیدم که مثلا برای خوندن اطلاعات از یه تیبل دیتابیس و انتصابش به یه کنترل مثل لیست ویو میان اطلاعات رو از دیتابیس میخونن و اونو میریزن در یه دیتاست
بعد هم دیتاست. مثل همین کاری که شما کردی.
میتونید به من بگید بین دیتاست و دیتاریدر کدوم یک برای همچین کاری (مثلا پر کردن دراپ دان لیست ) بهتره ؟؟؟
البته با اجازه.
فکر کنم دیتاریدر بهتره واسه پر کردن dropdown چون کلا برای کارهای فقط خواندنی بهنره از datareader استفاده بشه
بستگی به معماری برنامت داره.
اگر کیلویی برنامه مینویسی از DataSet استفاده کن.
البته اگر لایه ای کار می کنی باید از Disconnected Object استفاده کنی. مثل Dataset
البته امروزه در برنامه های شی گرا دیگه از DataSet استفاده نمیشه.
موفق باشید.
آخرین ویرایش به وسیله Behrouz_Rad : سه شنبه 05 خرداد 1388 در 08:49 صبح
راستش به همون روش معماری 3 لایه کار می کنم که دوستان در این فروم هم معرفیش کردند. توی نمونه هایی هم که دیدم معمولا از همین dataset استفاده شده...
سوال بود برام. آقای راد اینکه گفته شده datareader سریع تر از dateset هست؟ آیا درسته و اگر درسته پس اگر برای اعمالی مثل پرکردن یک لیست ویو از datareader استفاده بشه آیا باز هم باعث کیلویی شدن برنامه و پایین اومدن سطح کار خواهد شد؟
Datareader به نظرم یه مشکلی داره اونم اینه که تا وقتی که میخواین اطلاعات رو ازش بخونید باید به DB کانکت بمونید!
مطمئنید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ اگه اینطوری باشه جالب نیست!
امتحانش کنید! قبل از اینکه از datareader اطلاعات رو بگیرید connection رو close کنید!
کیلویی؟؟؟؟؟دلیل؟منطق؟چرا؟اگر کیلویی برنامه مینویسی از DataReader استفاده کن.
مهمترین دلیلش اینه که DataReader استفاده ی بهینه تری از حافظه می کنه. اسکات میشل مقاله ای در این زمینه چندین سال پیش نوشت. در سایت 4guysfromrolla.com می تونی پیداش کنی.
موفق باشید.
ممنون که پاسخ دادین.مهمترین دلیلش اینه که DataReader استفاده ی بهینه تری از حافظه می کنه.
حالا استفاده ی بهینه از حافظه مگه بده؟
یعنی چی؟..نوشته شده توسط aminnk
منظورم اینه:یعنی چی؟..
شما گفتین اگه می خواین کیلویی برنامه بنویسی می تونی از datareader استفاده کنی چون .......
حالا یعنی هر کسی از DataReader استفاده کرد یعنی کیلویی نوشته؟اخه من تو یه مقاله خوندم استفاده از DaTaReader بهتره تا DataSet (البته نه همه جا و کامل شرح داده بود که کجا استفاده بشه)
آها! اشتباه تایپی بوده! به جای DataReader باید مینوشتم DataSet. اصلاحش کردم.
DataReader در زمانی که فقط نیاز به خودندن داده ها داری خوبه.
DataSet برای Win App و برای زمانی خوبه که علاوه بر خوندن داده ها، نیاز هست که به صورت Offline با اونها کار کنی.
الان دیگه در برنامه های شی گرا از DataSet استفاده نمیشه.
در حالت ORM، کلاس تو معرف جدول تو و Property های تو معرف فیلدهای جدولت هستند.
Entity ها باید بین لایه ها پاس داده بشن.
موفق باشید.