PDA

View Full Version : مشکل در دستور select



programerinfonet
پنج شنبه 09 خرداد 1392, 23:17 عصر
سلام دوستان
شاید مسخره باشه اما این کد دیگه حوصلمو سر برده
نمی دونم کجاش مشکل داره

SELECT * FROM tblitems where bartype ='"+ state+"'

هیچ خطایی نمیده فقط خروجیش خالیه در صورتی که تو بانکم رکورد دارم
state از نوع stringe و توی بانک هم فیلد bartype از نوع تکست و با مقادیر a و b

mustafa13
پنج شنبه 09 خرداد 1392, 23:25 عصر
سلام " جزو داده هست یا نه اگه هست دو بار استفاده کنید

programerinfonet
پنج شنبه 09 خرداد 1392, 23:51 عصر
به نظر شما این کار می کنه ؟
this.oleDbDataAdapter1.SelectCommand = new OleDbCommand("SELECT * FROM tblitems where bartype =' state'", this.oleDbConnection1);

wolf_majid
جمعه 10 خرداد 1392, 00:06 صبح
برای رشته ها به جای = از like استفاده کن
در ضمن جرا قبل از State فاصله انداختی ؟ دقیقا" میخوای مثل همین باشه ؟

_behnam_
جمعه 10 خرداد 1392, 00:49 صبح
سلام دوست عزیز.
ExecuteNonQuery میکنید یا ExecuteReader ؟

programerinfonet
جمعه 10 خرداد 1392, 11:44 صبح
دستور کلی اینه

this.oleDbConnection1.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|data.ACCDB;JET OLEDB:DATABASE PASSWORD=Aslefallah11800;";
this.oleDbDataAdapter1.SelectCommand = new OleDbCommand("SELECT * FROM tblitems where( bartype like '" + state + "')", this.oleDbConnection1);
this.oleDbDataAdapter1.Fill(this.dataTable1);
this.dataGridView1.DataSource = dataTable1;


لطفأ یکی کمک کنه

veniz2008
جمعه 10 خرداد 1392, 12:38 عصر
سلام.
اول اینکه استفاده از like زمانی کاربرد داره که شما بخواید عبارات شبیه به اون کلمه وارد شده رو جستجو کنید. البته خود like چند حالت داره. مثلا فرض کنید دو کلمه ali و alireza رو داشته باشید و از like ای استفاده کنید که براساس شروع باشه. حالا اگه کاربر ali رو وارد کنه، هم علی رو میاره و هم alireza . که ممکنه این خروجی مورد نظر شما نباشه.
اما در مورد سوالتون، همونطوری که دوستان هم گفتن، شما باید فیلدهای رشته ای رو درون تک کوتیشن برای sql بفرستید. یعنی کد شما بصورت زیر میشه. همانطور که مطمئنا خودتون هم خبر دارید چیزی که بین دابل کوتیشن ها باشه عینا چاپ میشه. پس همیشه دابل کوتیشن ها را طوری قرار بدید که برای عبارات رشته ای تک کوتیشن قبل و بعد از عبارت مورد نظرتون باشه. در مورد فیلدهای عددی هم نیاز به داشتن تک کوتیشن قبل و بعد از عبارت نخواهید داشت. تا یادم نرفته اینم بگم که استفاده از این روش برای کوئری نوشتن سال هاست که منسوخ شده (چون براحتی میشه دستورات رو هک کرد. بهش میگن sql injection. بهترین کار اینه که از پارامترها استفاده کنید. اگر جستجو کنید بارها دربارش بحث شده).

this.oleDbDataAdapter1.SelectCommand = new OleDbCommand("SELECT * FROM tblitems where bartype ='" + state +"'", this.oleDbConnection1);
موفق باشید.