PDA

View Full Version : Add کردن پارامترها با استفاده از آرایه



hasti.s
یک شنبه 01 شهریور 1388, 05:50 صبح
سلام
من در حال نوشتن برنامه ای هستم که عملیاتUpdate,Insert,Delete رو روی جداول بانک انجام میده و نتیجه رو تو dataGridview نشون میده.برای اعمال بالا از پروسیجرهای Sql استفاده کردم.
1-سوال اول:مشکل من اینه که چون تعداد جدولام زیاده پس تعداد فیلدها و در نتیجه تعداد پارامترهایی که باید Add کنم هم زیاده و من میخوام یه کلاس کاربردی بنویسم که پارامترهارو یکی یکی Add نکنه و به جای اون از یه آرایه استفاده کنه و به تعداد فیلدهای یه برنامه،پارامتر Add کنه.
***ویرایش شده توسط مدیر***
تمام سعیمو کردم که جواب سوالامو با استفاده از جستجو پیدا کنم ولی به نتیجه ای نرسیدم.ممنون میشم اگه راهنماییم کنید.

k_m
یک شنبه 01 شهریور 1388, 10:48 صبح
سلام
ببین شاید بشه اینجوری انجام داد.فقط چند تا فرض در نظر گرفتم. این فعلا راهیه که من به نظرم رسید:
اول اینکه هنگام ساخت prosedure نام پارامتر ها رو هم نام فیلد مربوطه در table قراربدی و همیشه یک سطر از همون Table رو به تابعت بفرستی .
اون وقت شاید بشه اینجوری کدش رو نوشت:
public static SqlParameter[] CreatParameter(DataRow Row, bool IdIsAutoIncrese)
{
SqlParameter[] Parameters;
int StartIndx = IdIsAutoIncrese ? 1 : 0;
Parameters = new SqlParameter[Row.Table.Columns.Count-StartIndx];

for (int i = StartIndx; i < Row.Table.Columns.Count ; i++)
{
switch(Row.Table.Columns[i-StartIndx].DataType.ToString())
{
case "System.Byte[]":
{
Parameters[i-StartIndx ] = new SqlParameter("@" + Row.Table.Columns[i-StartIndx ].ColumnName, SqlDbType.Image);
Parameters[i-StartIndx ].Value = Row[i-StartIndx ];
break;
}
default:
Parameters[i-StartIndx ] = new SqlParameter("@" + Row.Table.Columns[i-StartIndx ].ColumnName,Row[i]);
break;

}

}
return Parameters;
}

IdIsAutoIncrese مربوط به وقتیه که ID جدولی که می خوای توی اون Insert کنی AutoIncresement باشه که دیگه برا این نباید parameter اضافه کنی.
case ها رو هم که دیگه باید ادامه بدی و برا حالت های مختلف بنویسی.

mn_zandy63
یک شنبه 01 شهریور 1388, 22:47 عصر
متن جدیدی نمیخوام بنویسم٬ فقط برای اینکه بتونم کد برادر کاظم :چشمک: رو درست بخونم این پست رو میزنم. و البته تشکر میکنم از اینکه دسترنج های چندین سالش رو میزاره اینجا برای استفاده عموم :لبخند:


public static SqlParameter[] CreatParameter(DataRow Row, bool IdIsAutoIncrese)
{
SqlParameter[] Parameters;
int StartIndx = IdIsAutoIncrese ? 1 : 0;
Parameters = new SqlParameter[Row.Table.Columns.Count-StartIndx];

for (int i = StartIndx; i < Row.Table.Columns.Count ; i++)
{
switch(Row.Table.Columns[i-StartIndx].DataType.ToString())
{
case "System.Byte[]":
{
Parameters[i-StartIndx ] = new SqlParameter("@" + Row.Table.Columns[i-StartIndx ].ColumnName, SqlDbType.Image);
Parameters[i-StartIndx ].Value = Row[i-StartIndx ];
break;
}
default:
Parameters[i-StartIndx ] = new SqlParameter("@" + Row.Table.Columns[i-StartIndx ].ColumnName,Row[i]);
break;

}

}
return Parameters;
}

مهدی کرامتی
دوشنبه 02 شهریور 1388, 12:18 عصر
اینجا رو ببین: http://spgen.codeplex.com

برای استفاده از کلاس هایی که این برنامه میسازه نیاز به یک فایل بنام dbobject.cs داری که در فایل حاوی سورس های برنامه وجود داره.

در این برنامه از روش آرایه ها برای ارسال پارامترها به Stored Procedure ها استفاده میشه.