PDA

View Full Version : سوال: خطای Data type mismatch در اجرای کوئری



vid4259
جمعه 06 دی 1392, 12:48 عصر
در این کد من می خوام کاربر با کلیک روی هر سطر دیتا گرید و انتخاب دکمه ویراش اطلاعات در تکست باکس ها نمایش بده ولی خطای زیر رو میده چطور باید حلش کنم ( واقع اگه یه تکست باکس جدا بزارم مثلا ای دی رو وارد کنم این کار انجام میشه ولی نمی خوام این کارو انجام بدم)

114472

و سوال دیگم اینه که چکار کنم عکسم از توی دیتا بیس تو محل مورد نظر نمایش داده بشه بجای این خط کد چی بنویسم

com.CommandText = "select * from tb_us where id ='" + id + "'";

OleDbDataReader dr;



con.Open();

dr = com.ExecuteReader();


if (dr.Read())



{


txt_name.Text = dr["fname"].ToString();

txt_family.Text = dr["family"].ToString();

txt_father.Text = dr["father"].ToString();

txt_national.Text = dr["idcode"].ToString();

txt_post.Text = dr["code"].ToString();

txt_mobil.Text = dr["mobil"].ToString();

txt_mail.Text = dr["email"].ToString();

//picUser.Image =dr["pic"];اینجا چی بنویسم



}

vid4259
جمعه 06 دی 1392, 16:39 عصر
دوستان مشکل بالا مربوط به خطا رو با جستجوی فراوان پیدا کردم حالا سوالم اینه که تفاوت این دو خط در چی هست
مرسی
با این کد به درستی انجام میشه

com.CommandText = "select * from tb_us where id =" +dataGridView1.CurrentRow.Cells[0].Value;

با این کد زیر خطا می داد

int id = (int)dataGridView1.CurrentRow.Cells[0].Value;
com.CommandText = "select * from tb_us where id = '" + id + "'";

Mahmoud.Afrad
جمعه 06 دی 1392, 16:51 عصر
اگر نام و نام خانوادگی و نام پدر و .... در دیتاگرید هست نیازی نیست دوباره روی دیتابیس کوئری بزنید.

اگر یک مقدار توجه کنید متوجه تفاوت میشد. تفاوت این دو در تک کوتیشن هایی هست که در کوئری گذاشتید در حالی که id رشته نیست بلکه عدده.

vid4259
جمعه 06 دی 1392, 16:57 عصر
مدیر عزیز پس اگر در قسمت دوم هم اگر این طور می نوشتم درست بود
com.CommandText = "select * from tb_us where id = " + id
;
پس میشه بگیم اگر کلید ما بنا به دلایلی عدد نباشه بلکه تکست باشه اون موقع اون کد درست اجرا می شد

Mahmoud.Afrad
جمعه 06 دی 1392, 17:34 عصر
مدیر عزیز پس اگر در قسمت دوم هم اگر این طور می نوشتم درست بود
com.CommandText = "select * from tb_us where id = " + id
;
پس میشه بگیم اگر کلید ما بنا به دلایلی عدد نباشه بلکه تکست باشه اون موقع اون کد درست اجرا می شد
کودری به این شکل درسته. ولی چون id ستونی عددی هست نباید دارای کاراکتر غیرعددی باشه. اگر داشته باشه sqlserver استثناء تولید میکنه. الته چون از دیتاگرید دریافت میشه نگران نباشید. اگر id از کاربر دریافت بشه باید چک کنید فقط عدد وارد شده باشه.