ورود

View Full Version : کجا نمیشه از پارامتر در SqlCommand استفاده کرد؟



Developer Programmer
پنج شنبه 14 خرداد 1388, 10:14 صبح
یه کلاس کوچولو تعریف کردم


public void BindCombo(ComboBox combo , string srcTable , string Display , string value )
{

dataadapter.SelectCommand = new SqlCommand();
dataadapter.SelectCommand.Connection = sqlconnection;
dataadapter.SelectCommand.CommandText = "Select @a,@b from @c ";
dataadapter.SelectCommand.Parameters.Add( "@a" , SqlDbType.NVarChar,30 ).Value = Display;
dataadapter.SelectCommand.Parameters.Add( "@b" , SqlDbType.NChar,5 ).Value = value;


sqlconnection.Open();
dataset = new DataSet();
dataadapter.Fill( dataset , srcTable );
sqlconnection.Close();

combo.DataSource = dataset;
combo.DisplayMember = srcTable + "." + Display;
combo.ValueMember = srcTable + "." + value;
}
از داخل فرم اصلی، این متد رو فراخوانی میکنم


private void Form1_Load( object sender , EventArgs e )
{
DataAccess da = new DataAccess();
da.BindCombo( comboBox1 , "Customers" , "ContactName" , "CustomerID" );
//Select ContactName,CustomerID from customers
}
نمیدونم چرا نمیشه از پارامتر در SqlCommand استفاده کرد.

Ali_Mor
پنج شنبه 14 خرداد 1388, 12:02 عصر
پارامتر c@ رو مقدار ندادی!

Developer Programmer
پنج شنبه 14 خرداد 1388, 12:14 عصر
ربطی به پارامتر C نداره، مقدار بده، ببین که کار نمیکنه

vcldeveloper
پنج شنبه 14 خرداد 1388, 17:17 عصر
در دستوران SQL نمیشه نام جدول را به صورت پارامتر ارسال کرد.

Developer Programmer
جمعه 15 خرداد 1388, 00:27 صبح
تنها نام جدول نیست، نام فیلد ها رو هم نمیشه با پارامتر ارسال کرد

vcldeveloper
جمعه 15 خرداد 1388, 06:39 صبح
بله نمیشه. تمام محدودیت هایی که برای پارامتر در SQL وجود دارد، اینجا هم وجود دارد. هدف از ارسال پارامتر این هست که RDBMS بتواند بعد از یک بار Parse کردن دستور SQL مربوطه، برای اجراهای بعدی کد را ذخیره کند (مثل یک SP موقت) تا عملیات مربوطه سریعتر اجرا شود. ارسال نام جدول یا نام فیلد به عنوان پارامتر باعث بی اعتبار شدن دستور Cache شده، و Parse مجدد دستور میشه، پس عملا ارزش خاصی نداره.

mohsen_zelzela00
جمعه 15 خرداد 1388, 13:42 عصر
در دستوران SQL نمیشه نام جدول را به صورت پارامتر ارسال کرد.

با سلام
ببخشید استاد ما اگه بخواییم یک dll بنویسیم مثلاً برای اضافه یک رکورد به جدول
حالا مجبوریم که نام جدول به صورت پارامتر باشه که شما اینجا فرمودید نمی شود پس راحل چیست
با تشکر

mohsen_zelzela00
پنج شنبه 21 خرداد 1388, 01:01 صبح
اساتید محترم ممنون میشم راهنمایی کنید...

adinochestva
پنج شنبه 21 خرداد 1388, 01:27 صبح
جالب نیست ولی اینجوری بنویس :


dataadapter.SelectCommand.CommandText = "Select @a,@b from " + tableNameVariable;

vcldeveloper
پنج شنبه 21 خرداد 1388, 02:37 صبح
ما اگه بخواییم یک dll بنویسیم مثلاً برای اضافه یک رکورد به جدول
حالا مجبوریم که نام جدول به صورت پارامتر باشه که شما اینجا فرمودید نمی شود پس راحل چیست
اینجا منظور از پارامتر، پارامترهای SQL هست، نه پارامتری که به یک تابع ارسال میشه. شما نمی تونید در یک دستور SQL پارامتر SQL برای نام جدول داشته باشید، ولی مثلا می تونید همان دستور SQL را در زمان اجرای برنامه توسط زبان برنامه نویسی خودتان بسازید، مثل همان کاری که در پست شماره 9 تاپیک پیشنهاد شد.

mohsen_zelzela00
پنج شنبه 21 خرداد 1388, 11:50 صبح
اینجا منظور از پارامتر، پارامترهای SQL هست، نه پارامتری که به یک تابع ارسال میشه. شما نمی تونید در یک دستور SQL پارامتر SQL برای نام جدول داشته باشید، ولی مثلا می تونید همان دستور SQL را در زمان اجرای برنامه توسط زبان برنامه نویسی خودتان بسازید، مثل همان کاری که در پست شماره 9 تاپیک پیشنهاد شد.

ببخشید استاد عزیز
روش معقول آیا این روش است آخه من می خوام یه برنامه بنویسم که مثلاً نام جدول خودم را به آن بدم و اون برنامه کدهای insert و ... رو بهم بده

vcldeveloper
پنج شنبه 21 خرداد 1388, 13:01 عصر
روش معقول آیا این روش است آخه من می خوام یه برنامه بنویسم که مثلاً نام جدول خودم را به آن بدم و اون برنامه کدهای insert و ... رو بهم بده
بله، مشکلی نیست.

mohsen_zelzela00
پنج شنبه 21 خرداد 1388, 13:55 عصر
برای اینکه تعداد پارامتر های من به اندازه تعداد فیلد های جدول من باشه چگونه باید عمل کنم
یا بهتره سوالم رو یه جور دیگه بپورسم
چگونه میتونم تعداد فیلد های جدول خودم رو بدست بیاورم

با تشکر

mohsen_zelzela00
یک شنبه 24 خرداد 1388, 21:17 عصر
دوستان کسی نمی تونه راهنماییم کنه؟؟؟؟؟