PDA

View Full Version : سوال: خطا در هنگام ریختن اطلاعات در Data Table



rayson
پنج شنبه 21 شهریور 1392, 11:54 صبح
سلام. خسته نباشید.
من اول اطلاعات را از دیتا بیس میخوام بگیرم و در دیتا تیبل بریزم و چک کنم اگر دیتا تییبل مقدار دارد اطلاعات مورد نیاز من را ثبت کند اما برنامه با خطا روبرو میشود.
چطوری باید به بگم که اگر مقداری نبود پیغام بده روش من مشکل دارد.
و همچنین الان خطا از من میگیرد : Conversion failed when converting the varchar value 'id_group' to data type int.

داده من از نوع اینتیجر هم هست درون دیتا بیس .
if (mojaz_chk_group.Checked == true && mojaz_chk_madrak.Checked == true)
{


DataTable dt = new DataTable();
SqlConnection con1 = new SqlConnection(connectionString: mycon);
SqlDataAdapter da = new SqlDataAdapter("Select id_group,id_madrak_tahsili,code_ozviat from group_for_employe where id_group='" + mojaz_cmb_group.ValueMember + "' and id_madrak_tahsili='" + mojaz_cmb_madrak_tahsili.ValueMember + "'", con1);

SqlCommand cmdInsert = new SqlCommand();
da.Fill(dt);
while (dt.Rows.Count == 0)
{
// نوع فیلد کد عضویت اینتیجر میباشید
myCodeOzviat = Convert.ToString(dt.Columns["code_ozviat"]);


cmdInsert.Parameters.AddWithValue("@sonati", mojaz_txt_sonati.Text);
cmdInsert.Parameters.AddWithValue("@felezi", mojaz_txt_felezi.Text);
cmdInsert.Parameters.AddWithValue("@sakhteshode", mojaz_txt_sakhte_shode.Text);
cmdInsert.Parameters.AddWithValue("@add_sal", mojaz_cmb_sal.Text);
cmdInsert.Parameters.AddWithValue("@code_ozviat", myCodeOzviat);



con1.Open();
cmdInsert.Connection = con1;
cmdInsert.ExecuteNonQuery();
con1.Close();
MessageBox.Show(" اطلاعات با موفقیت ثبت شد ");

}

// این کد چطوری باید به طور صحیح نوشت ؟
MessageBox.Show(" چنین مقادیری وجود ندارد ");

}


خیلی گیج شدم لطفا راهنمایی کنید .

parvizwpf
پنج شنبه 21 شهریور 1392, 12:40 عصر
اگه به کامندی که برای اینزرت دقت کنید هیچ دستور اینزرتی بهش ندادید. الان چیو باید اینزرت کنه؟ هیچی جز یک سلکت دیده نمیشه. اگه توی دیتا تیبل شما مقدار باشه توسط count اون میتونید مطلع بشید.

شهابسلطانی
پنج شنبه 21 شهریور 1392, 13:03 عصر
سلام
شما توی کانورت کردن ایراد دارید
کد رو نوشتید که به رشته تبدیل بشه ولی ایراد داره

شهابسلطانی
پنج شنبه 21 شهریور 1392, 13:06 عصر
اینم معنی اروری که سیستم بهتون میده[
"تبدیل در هنگام تبدیل ارزش VARCHAR id_group به داده های نوع int شکست خورده است"

rayson
پنج شنبه 21 شهریور 1392, 13:44 عصر
اینم معنی اروری که سیستم بهتون میده[
"تبدیل در هنگام تبدیل ارزش VARCHAR id_group به داده های نوع int شکست خورده است"
داده من از نوع int است درون دیتا بیس چرا نمیتونه درون دیتا تیبل ارسالش کند ؟
SqlDataAdapter da = new SqlDataAdapter("Select id_group,id_madrak_tahsili,code_ozviat from group_for_employe where id_group='" + mojaz_cmb_group.ValueMember + "' and id_madrak_tahsili='" + mojaz_cmb_madrak_tahsili.ValueMember + "'", con1);


کد سلکت جاییش ایراد دارد ؟
کمبو باکس من اطلاعاتش را از یک جدول میگیرد. و از طریق آی دی آن میخوام با آی دی هم نام که در جدول دیگر است و با کلید خارجی وصل شدند به هم مقایسه کند که اگر وجود داشت بر گرداند .
حالا من داده را از جدول میخونم و درون کمبو باکس نشون میدم و آی دی آن را به عنوان ValueMember مشخص میکنم ، و هنگام سلکت کردن مقایسه را با دستور valuemember انجام میدهم . دلیل خطا گرفته شده از نوع داده ای آن از کجا میباشد ؟ چه چیزی را باید تغییر دهم ؟
با تشکر

doostl
پنج شنبه 21 شهریور 1392, 14:46 عصر
من قبلا به همین ارور برخورد کردم مشکل وقتی ایجاد میشه که کمبو باکس value ه انتخاب شده نداشته باشه یعنی null برگرده اون موقع س که سیستم نمیتونه کانورتو انجام بده پس هر جاکه کمبو باکس داری از یه شرط استفاده کن
که اگه خالی بود -1 بده

البته من فکر میکنم اگه بجای valueMember از SelectedValue استفاده کنی هم مشکلت حل میشه (اول اینو امتحان کن)

farhad.k.t
پنج شنبه 21 شهریور 1392, 16:13 عصر
بعد از تعریف کردن connection string ، باید connection.open کنید و سپس عملیات را انجام دهید(بهتر است ابتدا چک کنید که اگر connection باز نیست ، آن را باز کند)
علامت ' نشانه ی نوع داده رشته ای می باشند ، شاید بخاطر استفاده از این علامت در دستورselect است، بهتر است مقادیر دستور سلکت هم به صورت پارامتر ارسال شوند.
در ضمن نوع داده ی فیلد id_group را چک کنید و با قرار دادن یک شرط از خالی نبودن کامبوباکس مطمئن شوید.
فکر کنم باید یک sqlcommand برای دستور insert بنویسید ، زیرا همان طور که یکی از دوستان گفتند، دستور insert وجود ندارد.

rayson
جمعه 22 شهریور 1392, 19:16 عصر
سلام دوستان .
نت مثل همیشه قطع شد ( ایران دیگه)
من کد ویرایش کردم طبق گفته های همه دوستا ن ، یک بخش برایم سوال شد که نتونستم به جواب برسم .
من میخوام اطلاعات ستون کد عضویت را بخونم از دیتا تیبل اما با کدی که من نوشتم برنامه خطا میده لطفا راهنمایی کنید.
راستی یک سوال دیگه ، کد من اگر داده نباشد پیغام میده که داده وجود ندارد و زمانی هم که داده هست اول پیغام میده که داده ثبت شد و بعد باز هم پیغام میده که داده ای وجود ندارد ( برنامه اجرا نمیشود فقط طبق تجربه قبلی گفتم ) زیرا شرط من با حلقه while هست و نمیتوانم از else برای آن استفاده کنم . راهکاری برای این موضوع به من بدید .
http://www.uploadtak.com/images/l2184_DataTable.jpg

با تشکر.

rayson
شنبه 23 شهریور 1392, 16:33 عصر
دوستان مشکلم حل شد کد قرار میدم اگر کسی به این مشکل بر خورد استفاده کند.

if (mojaz_chk_group.Checked == true && mojaz_chk_madrak.Checked == true)
{

// حالت اول هر دو گزینه گروه و مدرک فعال باشند
DataTable dt = new DataTable();
SqlConnection con1 = new SqlConnection(connectionString: mycon);
SqlDataAdapter da = new SqlDataAdapter(
"Select code_ozviat,id_group,id_madrak_tahsili from group_for_employe where id_group='" + mojaz_cmb_group.SelectedValue + " ' and id_madrak_tahsili='" + mojaz_cmb_madrak_tahsili.SelectedValue + "'", con1);

SqlCommand cmdInsert = new SqlCommand{ CommandText = "insert into tbl_mojaz(sonati,felezi,sakhteshode,code_ozviat,ad d_sal) VALUES (@sonati,@felezi,@sakhteshode,@code_ozviat,@add_sa l)" };

da.Fill(dt);
con1.Close();
if (dt.Rows.Count != 0)
{ int CodeOzviat=0;
for (int i = 0 ; i <dt.Rows.Count ; i++) {
CodeOzviat = 0;
CodeOzviat=Convert.ToInt32(dt.Rows[i].ItemArray[0]);
cmdInsert.Parameters.Clear();
cmdInsert.Parameters.AddWithValue("@sonati", mojaz_txt_sonati.Text);
cmdInsert.Parameters.AddWithValue("@felezi", mojaz_txt_felezi.Text);
cmdInsert.Parameters.AddWithValue("@sakhteshode", mojaz_txt_sakhte_shode.Text);
cmdInsert.Parameters.AddWithValue("@add_sal", mojaz_cmb_sal.Text);
cmdInsert.Parameters.AddWithValue("@code_ozviat", CodeOzviat);
con1.Open();
cmdInsert.Connection = con1;
cmdInsert.ExecuteNonQuery();
con1.Close();
}

MessageBox.Show(" اطلاعات با موفقیت ثبت شد ");

}else{


MessageBox.Show(" چنین مقادیری وجود ندارد ");
}
}