PDA

View Full Version : تفاوت بین IDbConnection و SqlConnection



mehrdad201
پنج شنبه 04 بهمن 1386, 22:22 عصر
سلام

خواستم بپرسم تفاوت بین این دو ابجکت چیست؟ SqlConnection و IDbConnection

هر کدوم چه مزایا و معایبی دارند ؟ و در حالت کلی کدوم بهتر هست؟

Behrouz_Rad
جمعه 05 بهمن 1386, 08:45 صبح
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);

موفق باشید.

mehrdad201
جمعه 05 بهمن 1386, 11:40 صبح
جناب راد ممنون

پس با این توضیحی که دادید چون من فقط از دیتابیس sqlserver استفاده می کنم همون sqlcommand تنها کافیه و نیازی نیست که از idbcommand استفاده بشه ؟

Behrouz_Rad
جمعه 05 بهمن 1386, 15:20 عصر
بله.......

mehrdad201
جمعه 05 بهمن 1386, 17:47 عصر
یک سوال دیگه هم داشتم (نخواستم تاپیک جدا بزنم)

در بعضی مثال ها دیدم که مثلا برای خوندن اطلاعات از یه تیبل دیتابیس و انتصابش به یه کنترل مثل لیست ویو میان اطلاعات رو از دیتابیس میخونن و اونو میریزن در یه دیتاست
بعد هم دیتاست. مثل همین کاری که شما کردی.

میتونید به من بگید بین دیتاست و دیتاریدر کدوم یک برای همچین کاری (مثلا پر کردن دراپ دان لیست ) بهتره ؟؟؟

miladr
جمعه 05 بهمن 1386, 23:26 عصر
البته با اجازه.
فکر کنم دیتاریدر بهتره واسه پر کردن dropdown چون کلا برای کارهای فقط خواندنی بهنره از datareader استفاده بشه

Behrouz_Rad
شنبه 06 بهمن 1386, 10:49 صبح
بستگی به معماری برنامت داره.
اگر کیلویی برنامه مینویسی از DataSet استفاده کن.
البته اگر لایه ای کار می کنی باید از Disconnected Object استفاده کنی. مثل Dataset
البته امروزه در برنامه های شی گرا دیگه از DataSet استفاده نمیشه.

موفق باشید.

mehrdad201
شنبه 06 بهمن 1386, 12:02 عصر
راستش به همون روش معماری 3 لایه کار می کنم که دوستان در این فروم هم معرفیش کردند. توی نمونه هایی هم که دیدم معمولا از همین dataset استفاده شده...

سوال بود برام. آقای راد اینکه گفته شده datareader سریع تر از dateset هست؟ آیا درسته و اگر درسته پس اگر برای اعمالی مثل پرکردن یک لیست ویو از datareader استفاده بشه آیا باز هم باعث کیلویی شدن برنامه و پایین اومدن سطح کار خواهد شد؟

Neo Persian
شنبه 06 بهمن 1386, 13:26 عصر
Datareader به نظرم یه مشکلی داره اونم اینه که تا وقتی که میخواین اطلاعات رو ازش بخونید باید به DB کانکت بمونید!

mehrdad201
شنبه 06 بهمن 1386, 18:34 عصر
مطمئنید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ اگه اینطوری باشه جالب نیست!

Neo Persian
شنبه 06 بهمن 1386, 18:46 عصر
امتحانش کنید! قبل از اینکه از datareader اطلاعات رو بگیرید connection رو close کنید!

aminkk
یک شنبه 03 خرداد 1388, 00:47 صبح
اگر کیلویی برنامه مینویسی از DataReader استفاده کن.
کیلویی؟؟؟؟؟دلیل؟منطق؟چرا؟

Behrouz_Rad
یک شنبه 03 خرداد 1388, 08:13 صبح
مهمترین دلیلش اینه که DataReader استفاده ی بهینه تری از حافظه می کنه. اسکات میشل مقاله ای در این زمینه چندین سال پیش نوشت. در سایت 4guysfromrolla.com می تونی پیداش کنی.

موفق باشید.

aminkk
یک شنبه 03 خرداد 1388, 19:31 عصر
مهمترین دلیلش اینه که DataReader استفاده ی بهینه تری از حافظه می کنه.
ممنون که پاسخ دادین.
حالا استفاده ی بهینه از حافظه مگه بده؟

Behrouz_Rad
دوشنبه 04 خرداد 1388, 08:55 صبح
حالا استفاده ی بهینه از حافظه مگه بده؟

یعنی چی؟..

naeeme
دوشنبه 04 خرداد 1388, 14:37 عصر
مهمترین دلیلش اینه که DataReader استفاده ی بهینه تری از حافظه می کنه. اسکات میشل مقاله ای در این زمینه چندین سال پیش نوشت. در سایت 4guysfromrolla.com می تونی پیداش کنی.

موفق باشید.

این مذمت DataReader بود یا تعریف از اون؟؟؟

aminkk
دوشنبه 04 خرداد 1388, 21:51 عصر
یعنی چی؟..
منظورم اینه:
شما گفتین اگه می خواین کیلویی برنامه بنویسی می تونی از datareader استفاده کنی چون .......

حالا یعنی هر کسی از DataReader استفاده کرد یعنی کیلویی نوشته؟اخه من تو یه مقاله خوندم استفاده از DaTaReader بهتره تا DataSet (البته نه همه جا و کامل شرح داده بود که کجا استفاده بشه)

Behrouz_Rad
سه شنبه 05 خرداد 1388, 08:43 صبح
آها! اشتباه تایپی بوده! به جای DataReader باید مینوشتم DataSet. اصلاحش کردم.
DataReader در زمانی که فقط نیاز به خودندن داده ها داری خوبه.
DataSet برای Win App و برای زمانی خوبه که علاوه بر خوندن داده ها، نیاز هست که به صورت Offline با اونها کار کنی.
الان دیگه در برنامه های شی گرا از DataSet استفاده نمیشه.
در حالت ORM، کلاس تو معرف جدول تو و Property های تو معرف فیلدهای جدولت هستند.
Entity ها باید بین لایه ها پاس داده بشن.

موفق باشید.

Neo Persian
سه شنبه 05 خرداد 1388, 11:44 صبح
http://aspnet.4guysfromrolla.com/articles/050405-1.aspx