آبجی
14th February 2010, 01:04 AM
در معماری چند لایه معمولا از DataSet برای انتقال داده بین لایه ها استفاده میشه.
دلیل استفاده از DataSet امکانات بیشتر و مدیریت آسان Connection هاست که بدون نیاز به Connection فعال و در حالت Disconnected میشه ازش استفاده کرد.
در حالتی که فقط نیاز به خواندن داده ها باشه و نه انجام عملی بر روی اونها، استفاده از DataReader به دلیل ذات وجودی اون در استفاده ی کمتر از حافظه پیشنهاد میشه.
اما چطور میشه در معماری چند لایه از DataReader استفاده کرد؟
DataReader در مجموعه ی ADO.NET شی ای از نوع Connected هست. یعنی نیاز به Connection فعال داره.
متد ExecuteReader که برای ایجاد DataReader استفاده میشه در یکی از Overload های خودش اجازه میده تا از مقدار Enum ای با نام CloseConnection استفاده بشه که موجب میشه بعد از بستن DataReader توسط فراخواننده ی DataReader، کانکشن به طور خودکار بسته بشه. تابع:
public SqlDataReader CustomerRead(int CustomerID)
{
//…
return myCommand.ExecuteReader(CommandBehavior.CloseConne ction);
}
نحوه ی فراخوانی:
SqlDataReader myReader = CustomerRead(1234);
//… read some data
myReader.Close();
دلیل استفاده از DataSet امکانات بیشتر و مدیریت آسان Connection هاست که بدون نیاز به Connection فعال و در حالت Disconnected میشه ازش استفاده کرد.
در حالتی که فقط نیاز به خواندن داده ها باشه و نه انجام عملی بر روی اونها، استفاده از DataReader به دلیل ذات وجودی اون در استفاده ی کمتر از حافظه پیشنهاد میشه.
اما چطور میشه در معماری چند لایه از DataReader استفاده کرد؟
DataReader در مجموعه ی ADO.NET شی ای از نوع Connected هست. یعنی نیاز به Connection فعال داره.
متد ExecuteReader که برای ایجاد DataReader استفاده میشه در یکی از Overload های خودش اجازه میده تا از مقدار Enum ای با نام CloseConnection استفاده بشه که موجب میشه بعد از بستن DataReader توسط فراخواننده ی DataReader، کانکشن به طور خودکار بسته بشه. تابع:
public SqlDataReader CustomerRead(int CustomerID)
{
//…
return myCommand.ExecuteReader(CommandBehavior.CloseConne ction);
}
نحوه ی فراخوانی:
SqlDataReader myReader = CustomerRead(1234);
//… read some data
myReader.Close();