PDA

View Full Version : نحوه ی کار با List<IDbDataParameter> چگونه است ؟



puvinax
دوشنبه 22 فروردین 1390, 19:05 عصر
با سلام خدمت اساتید

کد زیر را برای لایه ی DAL نوشته ام اما می خواهم به صورت Generic آن را بنویسم که البته نتوانستم !



public static IDataParameter[] CreateParameters(DataProvider providerType, int paramsCount)
{
IDataParameter[] iDbParams = new IDataParameter[paramsCount];
switch (providerType)
{
case DataProvider.SqlServer:
for (int i = 0; i < paramsCount; i++)
{
iDbParams[i] = new SqlParameter();
}
break;

case DataProvider.Oracle:
for (int i = 0; i < paramsCount; i++)
{
iDbParams[i] = new OracleParameter();
}
break;

case DataProvider.OleDb:
for (int i = 0; i < paramsCount; i++)
{
iDbParams[i] = new OleDbParameter();
}
break;

case DataProvider.Odbc:
for (int i = 0; i < paramsCount; i++)
{
iDbParams[i] = new OdbcParameter();
}
break;

default:
return null;
}
return iDbParams;
}



کد زیر را نوشتم اما نتوانستم کامل کنم !!!
خواهشمندم اگر تا حدی درست نوشتم تکمیل بفرمایید اگر می شود بهتر نوشت ممنون میشم که بیان بفرمایید

کد نصفه نیمه ی من !!!



public static List<IDbDataParameter> CreateParameters(DataProvider providerType)
{
List<IDbDataParameter> paramCollection = null;
switch (providerType)
{
case DataProvider.SqlServer:
foreach (var sqlServer in paramCollection)
{
//???
}
break;

case DataProvider.Oracle:
foreach (var oracle in paramCollection)
{
//???
}
break;

case DataProvider.OleDb:
foreach (var oleDb in paramCollection)
{
//???
}
break;

case DataProvider.Odbc:
foreach (var odbc in paramCollection)
{
//???
}
break;

default:
return null;
}
// return ????????
}




در کل نمیتوانم معادل کد ابتدایی را به صورت Generic بنویسم خواهشمندم دوستان کمک کنند، ممنونم.

exlord
دوشنبه 22 فروردین 1390, 22:04 عصر
اخه کد اولیت با دومی زمین تا آسمون فرق داره ... اون اولی رو میخوای با generic لیست بنویسی یا ساختارش یه چیزه دیگس .؟
اگه دقیقا همون متد اولی رو میخوایی ...
public static List<IDataParameter> CreateParameters(DataProvider providerType, int paramsCount)
{
List<IDataParameter> iDbParams = new List<IDataParameter>();
switch (providerType)
{
case DataProvider.SqlServer:
iDbParams.AddRange(Enumerable.Repeat(new SqlParameter(), paramsCount));
break;

}
return iDbParams;
}

puvinax
دوشنبه 22 فروردین 1390, 22:32 عصر
ممنونم گفتم که نتونستم ! بله دقیقا مدل Generic کد اول رو میخواستم
راستشو بخوای فکر میکردم با Generic میتونم paramsCount رو از بین ببرم اما الان فهمیدم که اشتباه فکر میکردم
ممنونم exlord عزیز

اما exlord جان کد شما رو که استفاده کردم تو خط 7 با ارور مواجه شدم که Resharper گقت که باید به صورت زیر نوشته بشه !


iDbParams.AddRange((IEnumerable<IDataParameter>) Enumerable.Repeat(new SqlParameter(), paramsCount));





متاسفانه من تو Generic خیلی ضعف دارم، می خواستم ازت بپرسم که این متد هایی که استفاده کردی همش مبحث Generic یا تو Linq مطرح میشه ؟
چون راستش من فکر کردم حالا هر چی هم دوستان بنویسند یه foreach داره اما شما دیگه عالی و حرفه ای نوشتی !

کلا چه کتابی رو پیشنهاد میکنید که مبحث Generic رو برام جا بندازه و مثال زیاد زده باشه ؟!

ممنونم ازت
یا علی

exlord
سه شنبه 23 فروردین 1390, 11:34 صبح
تو این حالت مقداری که متد Repeat برمیگردونه IEnumerable<SqlParameter> هستش که باید cast بشه به IEnumerable<IDataParameter>
اینجویره بنویسینش ...
iDbParams.AddRange(Enumerable.Repeat<IDataParameter>(new SqlParameter(), paramsCount));
برای generic هم نیازی به کتاب نیست تو گوگل سرچ کنین کلی منبع میاره ....
google (http://www.google.com/search?q=C%23+generic+list&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a)
List(T) Class (System.Collections.Generic) (http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBcQFjAA&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2F6sh2ey19.aspx&rct=j&q=C%23%20generic%20list&ei=XP-jTcTWK8jDhAf9gvTQCQ&usg=AFQjCNEDl4T3WgLBndZ1pncFdqEW4rkuog&sig2=T4CKrI5ubBM44xvM9Jdizw&cad=rja)

An Introduction to C# Generics (http://www.google.com/url?sa=t&source=web&cd=2&ved=0CB4QFjAB&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms379564%28v%3Dvs.80%29.aspx&rct=j&q=C%23%20generic%20list&ei=XP-jTcTWK8jDhAf9gvTQCQ&usg=AFQjCNFEfF44jvJabTi38sbVCQp5gGuK2g&sig2=5ryueD6saGJCkq-i8aaSYA&cad=rja)