PDA

View Full Version : به جای نام ستون میتوان متغییر گذاشت؟؟!



Yama12
شنبه 10 فروردین 1387, 01:41 صبح
سلام خدمت همه دوستان
من این پست رو تو قسمت sql server مطرح کردم اما بعد از کلی جرو بحث به جایی نرسیدم

کد زیر را نگاه کنید



SELECT * FROM [phone book] WHERE fname=@Sitem

من میخوام به جای اسم ستون یک متغییر به کار ببرم مثل var@ که میشه کد زیر:



SELECT * FROM [phone book] WHERE @var=@Sitem

اما وقتی اجرا میکنم دیتابیس هیچی بر نمیگردونه کد من اشکال داره یا اصلا این کار نشدنی هست
لطفا راهنمایی کنید که از چه کدی استفاده کنم
با تشکر

اَرژنگ
شنبه 10 فروردین 1387, 02:30 صبح
سلام خدمت همه دوستان
من این پست رو تو قسمت sql server مطرح کردم اما بعد از کلی جرو بحث به جایی نرسیدم

کد زیر را نگاه کنید



SELECT * FROM [phone book] WHERE fname=@Sitem
من میخوام به جای اسم ستون یک متغییر به کار ببرم مثل var@ که میشه کد زیر:



SELECT * FROM [phone book] WHERE @var=@Sitem
اما وقتی اجرا میکنم دیتابیس هیچی بر نمیگردونه کد من اشکال داره یا اصلا این کار نشدنی هست
لطفا راهنمایی کنید که از چه کدی استفاده کنم
با تشکر
دلیل نیاز به اینکار چی هست؟ این روش بیشتر از فایده اشکال ایجاد میکند

Yama12
شنبه 10 فروردین 1387, 02:35 صبح
میخوام خود کاربر انتخاب کنه که توی چه ستونی جستجو بکنه
برای یک دفترچه تلفن میخوام

اَرژنگ
شنبه 10 فروردین 1387, 06:39 صبح
میخوام خود کاربر انتخاب کنه که توی چه ستونی جستجو بکنه
برای یک دفترچه تلفن میخوام
با اس کیو ال معمولی نمیشه ولی یا میتوانید اس کیو ال را به شکل داینامیک ایجاد کنید و یا از LINQ استفاده کنید (هر دو یک روش هستند ولی به شکل مختلف).

Yama12
شنبه 10 فروردین 1387, 12:46 عصر
مرسی از توجهتون
اما من از اول عید دارم با sql کار میکنم
پس برای این چیزها که گفتید لطفا منبع معرفی کنید
با تشکر
مشکلم رو جور دیگه حل کردم(خیلی راهت تر)
اما بدم نمیاد بدونم این کار شدنی هست یا خیر

اَرژنگ
شنبه 10 فروردین 1387, 18:23 عصر
مرسی از توجهتون
اما من از اول عید دارم با sql کار میکنم
پس برای این چیزها که گفتید لطفا منبع معرفی کنید
با تشکر
مشکلم رو جور دیگه حل کردم(خیلی راهت تر)
اما بدم نمیاد بدونم این کار شدنی هست یا خیر

روشی که مشکلتان را حل کردید بگید

hdv212
شنبه 10 فروردین 1387, 18:40 عصر
شما میتونید یک StoredProcedure بنویسید که یک پارامتر ورودی بگیره، اون پارامتر ورودی همون نام فیلدی هست که میخواین توش جستجو کنید، حالا توی کد SP تون، میتونین مقدار اون پارامتر رو بررسی کنید که اگه فیلد1 بود، جستجو روی فیلد1 انجام بشه و اگه فیلد2 بود جستجو روی فیلد2 انجام بشه و .... .

Himalaya
شنبه 10 فروردین 1387, 20:40 عصر
راستش تو ارتباط بین #c و sql من اینکارو کردم جواب هم میده...البته اگه مقادیر combobox رو متغییر در نظر بگیریم..


SqlCommand command1 = new SqlCommand();
command1.Connection = connection1;
command1.CommandText = "delete from [" + comboBox1.Text + "]" +
" where [" + comboBox2.Text + "] = @a";
command1.CommandType = CommandType.Text;
command1.Parameters.AddWithValue("@a", textBox1.Text);
connection1.Open();
command1.ExecuteNonQuery();
connection1.Close();

Yama12
یک شنبه 11 فروردین 1387, 01:07 صبح
روشی که مشکلتان را حل کردید بگید

از روش خیلی ابتدایی ایتفاده کردم که اینجا کدش رو میزارم



switch (cbosearch.selectedIndex)
case0:
strCmdTex="SELECT * FROM phone book WHERE fname=@SItem"
break;
case1:
strCmdTex="SELECT * FROM phone book WHERE lname=@SItem
.
.
.

sqlDataAdapter objDataAdapter=new sqlDataAdapte(strCmdTex,objConnection);
objDataAdapter.Parameters.AddWithValu("@Sitem",textBox1.text);

اَرژنگ
یک شنبه 11 فروردین 1387, 06:56 صبح
شما میتونید یک StoredProcedure بنویسید که یک پارامتر ورودی بگیره، اون پارامتر ورودی همون نام فیلدی هست که میخواین توش جستجو کنید، حالا توی کد SP تون، میتونین مقدار اون پارامتر رو بررسی کنید که اگه فیلد1 بود، جستجو روی فیلد1 انجام بشه و اگه فیلد2 بود جستجو روی فیلد2 انجام بشه و .... .
یک مثال برایه اینکار لازم است، چونکه الگریتم فرقی نکرده ولی روش پیاده سازی اینکار هنوز معلوم نیست.

اَرژنگ
یک شنبه 11 فروردین 1387, 07:00 صبح
راستش تو ارتباط بین #c و sql من اینکارو کردم جواب هم میده...البته اگه مقادیر combobox رو متغییر در نظر بگیریم..


SqlCommand command1 = new SqlCommand();
command1.Connection = connection1;
command1.CommandText = "delete from [" + comboBox1.Text + "]" +
" where [" + comboBox2.Text + "] = @a";
command1.CommandType = CommandType.Text;
command1.Parameters.AddWithValue("@a", textBox1.Text);
connection1.Open();
command1.ExecuteNonQuery();
connection1.Close();




با اینکه این روش کاملا صحیح است کاشکی این کد را یکمی تمیز میکردید، این نوع کد نویسی روشهایه بد را معمولی جلوه میده، اگرچه حرفه‌ای ها باهاش مشکلی ندارند، ولی کد نویسی بی‌انضباتی و بدانه دیسیپلین را ترویج میکند.