PDA

View Full Version : سوال: مشکل در دستور Insert در c#



goldenpc
یک شنبه 31 اردیبهشت 1391, 20:01 عصر
درود
من یک پروژه دارم که باید سریع کاملش کنم پروژه زیاد مشکلی نیست یک برنامه که به بانک اطلاعاتی وصل شه و بعد حذف و اضافه کردن و ویرایش دستور
الان با دستور Insert به مشکل برخوردم ممنون میشم دوستان کمکم کنید.
من این دستور رو داخل دکمه Save می نویسم که استادمون داده ولی هیچکاری انجام نمیده
اگه امکانش هست لطفا کمکم کنید
private void button1_Click(object sender, EventArgs e)
{
SqlConnection connect = new SqlConnection("Data Source=ANCIENT-PC;Initial Catalog=da;Integrated Security=True");
connect.Open();
String str = "insert into student values({0},'{1}','{2}',{3},{4})";

}
این هم شکل کلی برنامه هست:
87266

iman_me
یک شنبه 31 اردیبهشت 1391, 20:42 عصر
دوست عزیز اون ,{1}{0} که نوشتی مال وقتیه که از String.Format استفاده کنی
بعدشم کل دستورت ناقصه

goldenpc
یک شنبه 31 اردیبهشت 1391, 20:47 عصر
دستور رو کامل کردم با توجه به مثال ها:
SqlConnection connect = new SqlConnection("Data Source=ANCIENT-PC;Initial Catalog=da;Integrated Security=True");
connect.Open();
String str = "insert into dt values({0},'{1}','{2}',{3},{4})";
str = String.Format(str, textBox1.Text, textBox2.Text, textBox3.Text);
MessageBox.Show(str);
ولی باز خطا میده
میشه دستور درست رو بهم بدین؟

veniz2008
یک شنبه 31 اردیبهشت 1391, 20:54 عصر
سلام،اینطوری استفاده کنید:بعد از کانکشن که باز شده بقیه کدهاتونو پاک کنید و این کدها رو قرار بدید(نام جدول من student بوده، شما با توجه به جدول خودت تغییرات رو اعمال کن، موفق باشی دوست من.

SqlCommand cmd = new SqlCommand("insert into student(name,family)values(N'"+textBox2.Text+"' ,N'"+textBox3.Text + "')",connect);
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");


connect.Close();


البته اینم بگم که این روش از لحاظ امنیتی مشکل داره و باید از پارامترها استفاده کنید ولی کار شما رو راه میندازه،ولی اگه قصد داشتید که این کار رو ادامه بدید حتما از پارامترها استفاده کنید.

iman_me
یک شنبه 31 اردیبهشت 1391, 21:02 عصر
فکر کنم کامل شد


SqlConnection connect = new SqlConnection("Data Source=ANCIENT-PC;Initial Catalog=da;Integrated Security=True");
String str = "insert into dt values({0},'{1}','{2}',{3},{4})";
str = String.Format(str, textBox1.Text, textBox2.Text, textBox3.Text);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = str;
connect.Open();
cmd.ExecuteNonQuery();
connect.Close();

goldenpc
یک شنبه 31 اردیبهشت 1391, 21:14 عصر
سلام،اینطوری استفاده کنید:بعد از کانکشن که باز شده بقیه کدهاتونو پاک کنید و این کدها رو قرار بدید(نام جدول من student بوده، شما با توجه به جدول خودت تغییرات رو اعمال کن، موفق باشی دوست من.

SqlCommand cmd = new SqlCommand("insert into student(name,family)values(N'"+textBox2.Text+"' ,N'"+textBox3.Text + "')",connect);
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");


connect.Close();


البته اینم بگم که این روش از لحاظ امنیتی مشکل داره و باید از پارامترها استفاده کنید ولی کار شما رو راه میندازه،ولی اگه قصد داشتید که این کار رو ادامه بدید حتما از پارامترها استفاده کنید.
درود
در قسمت کد cmd.ExecuteNonQuery(); این پیغام رو میده:
Cannot insert the value NULL into column 'ID', table 'da.dbo.dt'; column does not allow nulls. INSERT fails.
The statement has been terminated.


فکر کنم کامل شد


SqlConnection connect = new SqlConnection("Data Source=ANCIENT-PC;Initial Catalog=da;Integrated Security=True");
String str = "insert into dt values({0},'{1}','{2}',{3},{4})";
str = String.Format(str, textBox1.Text, textBox2.Text, textBox3.Text);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = str;
connect.Open();
cmd.ExecuteNonQuery();
connect.Close();



ممنون ولی این داخل قسمت cmd.ExecuteNonQuery(); این پیغام رو میده:
ExecuteNonQuery: Connection property has not been initialized.

arash ghafori
یک شنبه 31 اردیبهشت 1391, 21:16 عصر
درباره ی بانک توی این پست خیلی خوب و کامل صحبت شده یه نگاه بندازی بد نیست !
http://barnamenevis.org/showthread.php?340940-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D9%88-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3

younes221
یک شنبه 31 اردیبهشت 1391, 21:20 عصر
خطای اول : این میگه شما فیلد ID رو بهش نفرستادین ! یعنی احتمالا textbox1.text خالی هست ( شاید هم نباشه ولی اگه پروژتون رو بزارید بهتر میشه راهنمایی کرد)

خطای دوم : شما اصلا واسه شی sqlCommand کانکشن رو تعریف نکردین اونوقت اومدین بازش میکنین ! یعنی اصلا خطی به صورت

cmd.connection=connect;

رو ننوشتین

veniz2008
یک شنبه 31 اردیبهشت 1391, 21:22 عصر
دوست عزیز اون پیغام میگه که کلید نمیتونه خالی باشه(شما ID رو کلید گرفتید)، یعنی باید مقدار تکست باکس اول رو که مقدار id شما هست اضافه کنید،من کد رو براتون گذاشتم و گفتم با توجه به فیلدهای جدول خودتون تغییرات لازم رو بدید، یعنی اینطور:

SqlCommand cmd = new SqlCommand("insert into student(id,name,family)values(N'"+textBox1.Text +"', N'"+textBox2.Text+"' ,N'"+textBox3.Text + "')",connect);

اینم بگم که اگه از حروف فارسی درون id استفاده نمیکنید میتونید "'N را نگذارید.

goldenpc
یک شنبه 31 اردیبهشت 1391, 21:32 عصر
دوست عزیز اون پیغام میگه که کلید نمیتونه خالی باشه(شما ID رو کلید گرفتید)، یعنی باید مقدار تکست باکس اول رو که مقدار id شما هست اضافه کنید،من کد رو براتون گذاشتم و گفتم با توجه به فیلدهای جدول خودتون تغییرات لازم رو بدید، یعنی اینطور:

SqlCommand cmd = new SqlCommand("insert into student(id,name,family)values(N'"+textBox1.Text +"', N'"+textBox2.Text+"' ,N'"+textBox3.Text + "')",connect);

اینم بگم که اگه از حروف فارسی درون id استفاده نمیکنید میتونید "'N را نگذارید.
خیلی ممنون
درست شد

goldenpc
یک شنبه 31 اردیبهشت 1391, 21:35 عصر
میشه برای ویرایش و حذف هم راهنمایی کنید؟

iman_me
یک شنبه 31 اردیبهشت 1391, 21:43 عصر
دوست عزیز کدش همینه فقط دستور SQL رو تغییر بدید

goldenpc
یک شنبه 31 اردیبهشت 1391, 21:55 عصر
دوست عزیز کدش همینه فقط دستور SQL رو تغییر بدید
سپاس
الان من این کد رو به این شکل تغییر دادم:
SqlConnection connect = new SqlConnection("Data Source=ANCIENT-PC;Initial Catalog=da;Integrated Security=True");
connect.Open();
SqlCommand cmd = new SqlCommand("delete from dt where(id)values(N'" + textBox1.Text + "')", connect);
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");
connect.Close();
این قسمت cmd.ExecuteNonQuery(); پیغام Incorrect syntax near the keyword 'values'. رو میده

younes221
یک شنبه 31 اردیبهشت 1391, 22:01 عصر
ای کاش کمی در مورد حداقل دستورات مطالعه میکردید ، عزیز دستور delete به صورت زیر هست :

delete * from dt where id=@id

و بعد لیست پارامترها شبیه دستور insert

دیگه Values لازم نداره .

goldenpc
یک شنبه 31 اردیبهشت 1391, 22:09 عصر
خیلی ممنونه
من کد رو بصورت زیر تغییر دادم ولی باز همون خطا رو میده:
SqlCommand cmd = new SqlCommand("delete * from dt where id=@id(N'" + textBox1.Text + "')", connect);

younes221
یک شنبه 31 اردیبهشت 1391, 22:15 عصر
بعد از @id رو دیگه حذف کن.

مگه داخل دستور insert چگونه پارامتر ها رو تعیین میکردین اینجا هم همونطور هست.


SqlCommand command = new SqlCommand();
command.Connection = connect;
command.CommandText = "delete * from dt where id=@id";
command.Parameters.AddWithValue("@id", textbox1.text);

veniz2008
یک شنبه 31 اردیبهشت 1391, 22:16 عصر
اینطوری بنویس :

SqlCommand cmd = new SqlCommand("delete from dt where id= N'" + textBox1.Text + "'", connect);


برای حذف دیگه از * استفاده نمی کنیم، موفق باشی

goldenpc
یک شنبه 31 اردیبهشت 1391, 22:22 عصر
خیلی خیلی ممنونم ازتون
میشه در مورد دستور ویرایش هم توضیح بدین؟

iman_me
یک شنبه 31 اردیبهشت 1391, 22:27 عصر
UpDate TableName SET Name='scda',Family... WHERE ID=1

veniz2008
یک شنبه 31 اردیبهشت 1391, 22:28 عصر
قدم اول رو خودتون بردارید، یه جستجو در سایت بکنید و با توجه به جدولتون تغییرات رو اعمال کنید،هرجا سوال داشتید بپرسید

goldenpc
یک شنبه 31 اردیبهشت 1391, 23:46 عصر
خیلی ممنونم ازتون
من دستور زیر رو می نویسم ولی باز خطا میده:
SqlCommand cmd = new SqlCommand("update dt set name='Bardiya' where id=13)", connect);
cmd.ExecuteNonQuery();
MessageBox.Show("مشخصات با موفقیت ثبت شد");
connect.Close();

arash ghafori
یک شنبه 31 اردیبهشت 1391, 23:53 عصر
اگه Update میخوای این کد نگاه بندازی بد نیست :

87279
سوالی هست بپرس.

veniz2008
یک شنبه 31 اردیبهشت 1391, 23:57 عصر
اینطوری بنویس دوست من:

SqlCommand cmd =new SqlCommand ("UPDATE dt SET name =N'" + textBox2.Text + "', family =N'" + textBox3.Text + "'WHERE id ='" + textBox1.Text + "'", connect);

goldenpc
دوشنبه 01 خرداد 1391, 00:01 صبح
خیلی خیلی ممنونم ازتون
درست شد :لبخندساده:

alitootoo
دوشنبه 11 دی 1391, 14:14 عصر
به نام خدا
سلام دوستان عزیز
من کلید رو توی بانک identityتعرف کردم حالا توی برنامه وقتی که میخوام insert کنم متاسفانه نمیدونم چطوری مقدار کلیدو اضافه کنم.

RamezanBeik
دوشنبه 11 دی 1391, 14:20 عصر
قدم اول رو خودتون بردارید، یه جستجو در سایت بکنید و با توجه به جدولتون تغییرات رو اعمال کنید،هرجا سوال داشتید بپرسید

من هم کاملا موفقم برای شروع این رو توی گوگل جسنتجو کن
w3school commanfd Sql

alitootoo
دوشنبه 11 دی 1391, 16:43 عصر
من هم کاملا موفقم برای شروع این رو توی گوگل جسنتجو کن
w3school commanfd Sql

ممنونم از راهنمایی سازنده شما دوستان عزیز
گشتم به جایی نرسیدم.
ممنون میشم جواب رو ارسال کنید