PDA

View Full Version : مبتدی: مشکل در هنگام insert کردن



naghneh
یک شنبه 17 خرداد 1394, 07:28 صبح
با سلام
من یه کلاس ساختم بعد یه رشته به عنوان کوئری بهش پاس میکنم
ولی روی دستور DB.cmd.ExecuteNonQuery();
این ارور رو بهم میده
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
لطفا راهنمایی کنید
باتشکر فراوان

salibsatan
یک شنبه 17 خرداد 1394, 08:45 صبح
کدتون رو قرار بدین.اگر موقع سلکت و اجرای بقیه دستورات مشکل ندارین، فقط sqlcomman رو اینجا بزارین تا ببینم مشکل چیه

naghneh
یک شنبه 17 خرداد 1394, 08: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, 09:31 صبح
مگه میشه insert رو توی دیتا تیبل برگردوند؟؟؟
یه مشکل دیگه هم کدتون داره که خودم تست کردم
اینجا اومدید اینطور تعریف کردید
public static SqlDataAdapter da = new SqlDataAdapter("", con);

بعدش آخر کار
DB.da.Fill(dt);

الان با این نوع تعریف دستوری ست نکردید که بخواد اجرا کنه

naghneh
یک شنبه 17 خرداد 1394, 09:57 صبح
دوست عزیز میشه منو راهنمایی کنی
الان دقیقا باید چه کاری کنم؟

باتشکر

محمد رضا فاتحی
یک شنبه 17 خرداد 1394, 10:21 صبح
چون خطایی که می گید روی DB.cmd.ExecuteNonQuery(); می گیره به نظرم کوئریتون رو یه چک بکنید بخصوص نوع فیلدهاتون... چون دستورش که خطا نداره و اگه احیانا تعداد فیلدهای کوئری کمتر از جدول باشه باید اسامی فیلدهاتون رو هم بیارید تو کوئری. بهتره یه نما از جدول بزارید شاید بهتر بشه راهنمایی کرد.

و در مورد این کلاس هم به نظرم بهتره یه تابع برای select بنویسید که datatable برگردونه و یه تابع هم برای insert,update,delete.

asman.abi
یک شنبه 17 خرداد 1394, 16: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, 12: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, 17: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 نیست.

موفق باشید.