View Full Version : مبتدی: مشکل در هنگام insert کردن
naghneh
یک شنبه 17 خرداد 1394, 08:28 صبح
با سلام
من یه کلاس ساختم بعد یه رشته به عنوان کوئری بهش پاس میکنم
ولی روی دستور DB.cmd.ExecuteNonQuery();
این ارور رو بهم میده
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
لطفا راهنمایی کنید
باتشکر فراوان
salibsatan
یک شنبه 17 خرداد 1394, 09:45 صبح
کدتون رو قرار بدین.اگر موقع سلکت و اجرای بقیه دستورات مشکل ندارین، فقط sqlcomman رو اینجا بزارین تا ببینم مشکل چیه
naghneh
یک شنبه 17 خرداد 1394, 09:58 صبح
این کلاسیه که تعریف کردم
class DB
{
public static SqlConnection con = new SqlConnection("SERVER=.; DataBase=db; Integrated Security = True");
public static SqlDataAdapter da = new SqlDataAdapter("", con);
public static DataTable dt = new DataTable();
public static SqlCommand cmd = new SqlCommand("", con);
public static DataTable exec(string s)
{
DataTable dt = new DataTable();
DB.cmd.CommandText = s;
if (DialogResult.No == MessageBox.Show("آیامطمئنید؟", "هشدار", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2, MessageBoxOptions.RightAlign))
return dt;
DB.con.Open();
DB.cmd.ExecuteNonQuery();
DB.con.Close();
DB.da.Fill(dt);
return dt;
}
واین هم کامندی که براش میفرستم
private void button1_Click(object sender, EventArgs e)
{
s = "insert into project Values(";
s += projectsubject.Text + " , ";
s += comboBox1.SelectedItem + " , ";
s += comboBox2.SelectedItem + " , ";
s += textBox7.Text + " , '";
s += textBox2.Text + "' , '";
s += textBox5.Text + "' , '";
s += textBox3.Text + "' , '";
s += textBox4.Text + "')";
dt = DB.exec(s);
}
محمد رضا فاتحی
یک شنبه 17 خرداد 1394, 10:31 صبح
مگه میشه insert رو توی دیتا تیبل برگردوند؟؟؟
یه مشکل دیگه هم کدتون داره که خودم تست کردم
اینجا اومدید اینطور تعریف کردید
public static SqlDataAdapter da = new SqlDataAdapter("", con);
بعدش آخر کار
DB.da.Fill(dt);
الان با این نوع تعریف دستوری ست نکردید که بخواد اجرا کنه
naghneh
یک شنبه 17 خرداد 1394, 10:57 صبح
دوست عزیز میشه منو راهنمایی کنی
الان دقیقا باید چه کاری کنم؟
باتشکر
محمد رضا فاتحی
یک شنبه 17 خرداد 1394, 11:21 صبح
چون خطایی که می گید روی DB.cmd.ExecuteNonQuery(); می گیره به نظرم کوئریتون رو یه چک بکنید بخصوص نوع فیلدهاتون... چون دستورش که خطا نداره و اگه احیانا تعداد فیلدهای کوئری کمتر از جدول باشه باید اسامی فیلدهاتون رو هم بیارید تو کوئری. بهتره یه نما از جدول بزارید شاید بهتر بشه راهنمایی کرد.
و در مورد این کلاس هم به نظرم بهتره یه تابع برای select بنویسید که datatable برگردونه و یه تابع هم برای insert,update,delete.
asman.abi
یک شنبه 17 خرداد 1394, 17:07 عصر
همان طور که گفته شد کد شما دارای ایرادات زیادی است.
اول: این کد دستور نداره sqlDataAdaptor بدون دستور یعنی چه؟ ""
public static SqlDataAdapter da = new SqlDataAdapter("", con);
دوم: DataTable رو در دو جا تعریف کردی یکی سراسری و یکی محلی. اگه به سراسری نیازی نیست حتما بردارید چون بیهوده فضا مصرف می کنه.
public static DataTable dt = new DataTable();
سوم:sqlCommand بدون دستور! پس چه درخواستی از پایگاه داری؟ دستورت باید در sqlcommand باشه. "" خالی
public static SqlCommand cmd = new SqlCommand("", con);
چهارم:در دستور insert مشکل وجود داره. نام ستون های جدول project باید آورده شود. مثلا: insert into project(column1,column2,..) values(value1,value2,...)
s = "insert into project Values(";
پنجم: اصلا تعریف کلاس به دین شکل کار قشنگی نیست. شما مقادیر اصلی و ثابت اتصال به پایگاه رو در یک کلاس قرار بدی و بر اساس اون عملیات درج و حذف و ... رو انجام بدی و بعدا در dataTable بر اساس نیاز قرار بدی.
محمد رضا فاتحی
دوشنبه 18 خرداد 1394, 13:02 عصر
مواردی که دوستمون
asman.abi (http://barnamenevis.org/member.php?285323-asman-abi) گفتن درسته فقط من مورد سومش رو اصلاح کنم
DB.cmd.CommandText = s;
دوستمون naghneh (http://barnamenevis.org/member.php?361136-naghneh) این کدی رو که نوشتن دستور رو به SqlCommand اختصاص میده
asman.abi
سه شنبه 19 خرداد 1394, 18:51 عصر
مواردی که دوستمون
asman.abi (http://barnamenevis.org/member.php?285323-asman-abi)
گفتن درسته فقط من مورد سومش رو اصلاح کنم
DB.cmd.CommandText = s;
دوستمون naghneh (http://barnamenevis.org/member.php?361136-naghneh) این کدی رو که نوشتن دستور رو به SqlCommand اختصاص میده
بله . منظورم اینه که اون خط دیگه لازم نیست. اگر مورد سوم رو نوشتن دیگه لازم به commandText نیست.
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.