PDA

View Full Version : syntax error in update statment



bahar_7
یک شنبه 31 مرداد 1389, 16:02 عصر
سلام دوستان

اشکال این کد چیه؟


publicvoid btnEdit_Click(object sender, EventArgs e)
{

string sql = " update tbl_users"
+ " set first_name=" + txtName.Text.ToString() + " ,"
+ " last_name= " + txtFamily.Text.ToString() + " ,"
+ " student_number= " + txtStudentId.Text.ToString() + " ,"
+ " username= " + txtUser.Text.ToString() + " ,"
+ " password= " + txtPass1.Text.ToString() + ","
+ " Email_address= " + txtEmailAddress.Text.ToString() + ","
+ " univercity_id= " + this.cmbUni.SelectedValue.ToString() + ","
+ " course_id= " + this.cmbCourse.SelectedValue.ToString() + ", "
+ " province_id= " + this.cmbProvince.SelectedValue.ToString() + ","
+ " city_id= " + this.cmbCity.SelectedValue.ToString() + " ,"
+ " year= " + this.cmbYear.SelectedIndex.ToString() + " ,"
+ "' where ID =" + ID_NUMBER.ToString();
dbobject.ExecuteNonQuery(sql);
}
syntax error in update statment میده که وقتی هم که query می گیرم
[/code] update tbl_users set first_name=test , last_name= testi , student_number= 8512 , username= bahar , password= qwe, Email_address= test@gmail.com, univercity_id= 1, course_id= 7, province_id= 7, city_id= 14 , year= 86 ,' where ID =13 [/code]
syntax error (missing operator)in query expression
'test@gmail.com'
میده! و @gmail مشکی میشه!
کدEemail_address چه مشکلی داره؟
با تشکر

ricky22
یک شنبه 31 مرداد 1389, 16:09 عصر
پس کو تک کوتیشن؟
'

bahar_7
یک شنبه 31 مرداد 1389, 16:15 عصر
پس کو تک کوتیشن؟
'

اونم برداشتم بازم همن erroro میده!

mahdi_7610
یک شنبه 31 مرداد 1389, 16:16 عصر
به نظرم یکی این که از تک کوتیشن بعد از = استفاده نکردید .

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

یه مقدارش از کدها را برات نوشتم بقیه را هم اینطوری درست کن .



string sql = " update tbl_users set first_name= ' " + txtName.Text.ToString() + " ' ,last_name= ' " + txtFamily.Text.ToString() + " ' ,

M.YasPro
یک شنبه 31 مرداد 1389, 16:18 عصر
سلام
اولا تمام مقادیر تکست باکس هاتو باید داخل single cotition بزاری مثل:


set first_name='" + txtName.Text.ToString() + "' ,"

بعد شما نباید به اینصورت مقدار به کوئری بفرستید به جای کد بالا می تونید به اینصورت بنویسید :


dbobject.Parameters.AddWithValue("@name",txtName.Text);

و به اینصورت استفاده کنید :


update tbl_users set firstname=@name



یه اشکال مربوط به syntax هم در این خط هست :


+ "' where ID =" + ID_NUMBER.ToString();


یه تک کوتیشن قبل از where هست که نباید اونجا باشه .


موفق باشید .

mahdi_7610
یک شنبه 31 مرداد 1389, 16:21 عصر
در کل باید به این صورت بنویسی

یک نمونه


string sql = "UPDATE NameTable SET Name= '" + textBox1.Text + "',Family= '" + textBox2.Text + "'WHERE Number= '" + textBox3.Text + "'";
cmd = new OleDbCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
da.Fill(ds, "TableName");
con.Close();

ali1234567890
یک شنبه 31 مرداد 1389, 16:44 عصر
اگه کارهایی که تو پست های قبلی گفته شد رو کردی ولی نتیجه نداد بهتر اسم فیلد هایی مثل username
رو به این صورت بنویسی [username]من خودم قبلا این مشکل داشتم

bahar_7
یک شنبه 31 مرداد 1389, 21:05 عصر
اول از همه تشکر از همگی دوستان
دوستان کد ها را تغییر دادم اما بازم error میده!

string sql = " update tbl_users set [first_name]= ' " + txtName.Text.ToString() + " ',[last_name]=' " + txtFamily.Text.ToString() + " ', student_number=' " + txtStudentId.Text.ToString()+ "',[username]=' " + txtUser.Text.ToString() + " ',Email_address=' " + txtEmailAddress.Text.ToString() + " ' password= ' " + txtPass1.Text.ToString() + " ' ,univercity_id=' " + this.cmbUni.SelectedValue.ToString() + " ' , course_id= '" + this.cmbCourse.SelectedValue.ToString() + " ' , province_id= '" + this.cmbProvince.SelectedValue.ToString() + " ' , city_id= '" + this.cmbCity.SelectedValue.ToString() + " ' ,year= " + this.cmbYear.SelectedItem.ToString() + " ' WHERE ID= '" + ID_NUMBER.ToString() + "'";

dbobject.ExecuteNonQuery(sql);و error

Syntax error (missing operator) in query expression " test@gmail.com ' password='123" .


این مدلیم همون error رو میده!


string sql = " update tbl_users set first_name= ' " + txtName.Text.ToString() + " ',last_name=' " + txtFamily.Text.ToString() + " ', student_number=' " + txtStudentId.Text.ToString()+ "',username=' " + txtUser.Text.ToString() + " ',Email_address=' " + txtEmailAddress.Text.ToString() + " ' password= ' " + txtPass1.Text.ToString() + " ' ,univercity_id=' " + this.cmbUni.SelectedValue.ToString() + " ' , course_id= '" + this.cmbCourse.SelectedValue.ToString() + " ' , province_id= '" + this.cmbProvince.SelectedValue.ToString() + " ' , city_id= '" + this.cmbCity.SelectedValue.ToString() + " ' ,year= " + this.cmbYear.SelectedItem.ToString() + " ' WHERE ID= '" + ID_NUMBER.ToString() + "'";

dbobject.ExecuteNonQuery(sql);

ricky22
یک شنبه 31 مرداد 1389, 21:08 عصر
فکر کنم مساوی نزاشتی.
--------------------
در ضمن روشت غلط هست.
طبق روش پارامتری عمل کن.

bahar_7
یک شنبه 31 مرداد 1389, 21:14 عصر
فکر کنم مساوی نزاشتی.
--------------------
در ضمن روشت غلط هست.
طبق روش پارامتری عمل کن.
واسه کجا مساوی نذاشتم؟
روش پارامتری چیه؟
با تشکر

cheshm6k
دوشنبه 01 شهریور 1389, 01:22 صبح
سلام
اولا تمام مقادیر تکست باکس هاتو باید داخل single cotition بزاری مثل:


set first_name='" + txtName.Text.ToString() + "' ,"

بعد شما نباید به اینصورت مقدار به کوئری بفرستید به جای کد بالا می تونید به اینصورت بنویسید :


dbobject.Parameters.AddWithValue("@name",txtName.Text);

و به اینصورت استفاده کنید :


update tbl_users set firstname=@name



یه اشکال مربوط به syntax هم در این خط هست :


+ "' where ID =" + ID_NUMBER.ToString();


یه تک کوتیشن قبل از where هست که نباید اونجا باشه .


موفق باشید .


با سلام

اگر به نوشته هایی که این دستمون قرار دادن توجه می کردین جوابتونو می گرفتین.

نکته ای که احتمالا دقت نکردین اینه که اگه نوع فیلدتون تو جدول عددی هستش دیگه کوتیشن نیاز نیست .
مثال : فرض کنید ID نوعش عددیه و name رشته ای
حالا داریم :

update tbl_Name Set ID="+txtID.text+", name='"+txtName.text+"' where ....

bahar_7
دوشنبه 01 شهریور 1389, 23:12 عصر
سلام
اولا تمام مقادیر تکست باکس هاتو باید داخل single cotition بزاری مثل:


set first_name='" + txtName.Text.ToString() + "' ,"
بعد شما نباید به اینصورت مقدار به کوئری بفرستید به جای کد بالا می تونید به اینصورت بنویسید :


dbobject.Parameters.AddWithValue("@name",txtName.Text);
و به اینصورت استفاده کنید :


update tbl_users set firstname=@name
موفق باشید .

کلا همشو با @ بنویسم ؟ فقط واسه email_address و پسورد بخوام بنویسم میشه؟
یا اگه بخوام همی ی مواردو این مدلی بنویسم چه جوری میشه؟
با تشکر

mmd2009
دوشنبه 01 شهریور 1389, 23:22 عصر
با سلام

شما وقتی می خواهید پارامتری ارسال کنید دقیقا باید کاری که M.YasPro http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://www.barnamenevis.org/forum/showthread.php?p=1073431#post1073431) رو انجام بدید و فرقی نمیکنه واسه یکی باشه یا 10 تا . بلکه بستگی داره شما چندتا می خواهید ارسال کنید

کد زیر رو ببینید :



cmd.commandtext= "insert into table(name,family,address,tell)values(@name,@damil y,@address,@tell)";

dbobject.Parameters.AddWithValue("@name",txtName.Text);
dbobject.Parameters.AddWithValue("@family",txtfamily.Text);
dbobject.Parameters.AddWithValue("@address",txtaddress.Text);
dbobject.Parameters.AddWithValue("@tell",txttell.Text);



دید بستکی داره من چندتا پارامتر بخوام.

حالا مثلا کد ویرایش



cmd.commandtext=update tbl_users set name=@name,family=@family,adress=@adreess"

dbobject.Parameters.AddWithValue("@name",txtName.Text);
dbobject.Parameters.AddWithValue("@family",txtfamily.Text);
dbobject.Parameters.AddWithValue("@address",txtaddress.Text);


مشخص شده که من 3 تا پارامتر خواستم و 3 تا رو نوشتم.

البته به این شکل که کد اپدیت رو نمی نویسن باید حتما دستور where هم داشته باشه که بدونی بر اساس چی باید ویرایش بکنی که فقط یک رکورو ویرایش بشه یا رکورد های خاصی

bahar_7
دوشنبه 01 شهریور 1389, 23:22 عصر
با سلام

اگر به نوشته هایی که این دستمون قرار دادن توجه می کردین جوابتونو می گرفتین.

نکته ای که احتمالا دقت نکردین اینه که اگه نوع فیلدتون تو جدول عددی هستش دیگه کوتیشن نیاز نیست .
مثال : فرض کنید ID نوعش عددیه و name رشته ای
حالا داریم :

update tbl_Name Set ID="+txtID.text+", name='"+txtName.text+"' where ....
بازم درست نشد که !,واسه ایمیل و پسورد syntax می گیره!

bahar_7
دوشنبه 01 شهریور 1389, 23:31 عصر
با سلام

شما وقتی می خواهید پارامتری ارسال کنید دقیقا باید کاری که M.YasPro http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://www.barnamenevis.org/forum/showthread.php?p=1073431#post1073431) رو انجام بدید و فرقی نمیکنه واسه یکی باشه یا 10 تا . بلکه بستگی داره شما چندتا می خواهید ارسال کنید

کد زیر رو ببینید :



cmd.commandtext= "insert into table(name,family,address,tell)values(@name,@damil y,@address,@tell)";

dbobject.Parameters.AddWithValue("@name",txtName.Text);
dbobject.Parameters.AddWithValue("@family",txtfamily.Text);
dbobject.Parameters.AddWithValue("@address",txtaddress.Text);
dbobject.Parameters.AddWithValue("@tell",txttell.Text);

دید بستکی داره من چندتا پارامتر بخوام.

حالا مثلا کد ویرایش



cmd.commandtext=update tbl_users set name=@name,family=@family,adress=@adreess"

dbobject.Parameters.AddWithValue("@name",txtName.Text);
dbobject.Parameters.AddWithValue("@family",txtfamily.Text);
dbobject.Parameters.AddWithValue("@address",txtaddress.Text);
مشخص شده که من 3 تا پارامتر خواستم و 3 تا رو نوشتم.

البته به این شکل که کد اپدیت رو نمی نویسن باید حتما دستور where هم داشته باشه که بدونی بر اساس چی باید ویرایش بکنی که فقط یک رکورو ویرایش بشه یا رکورد های خاصی
cmd.commandtext را چه جوری بهش بشناسونم؟
مرسی

cheshm6k
سه شنبه 02 شهریور 1389, 00:01 صبح
بازم درست نشد که !,واسه ایمیل و پسورد syntax می گیره!
سلام .

اسم فیلد password رو عوض کن، مثلا بذار pass . شاید از اون باشه . اگه درست نشد سورس یا دیتابیس رو آپلود کن ببینیم مشکل کجاست.

mmd2009
سه شنبه 02 شهریور 1389, 00:02 صبح
بفرما



// For SQL

SqlCommand cmd = new SqlCommand();

cmd.CommandText = "update tbl_users set name=@name,family=@family,adress=@adreess";

// For Access

OleDbCommand cmd = new OleDbCommand();

cmd.CommandText = "update tbl_users set name=@name,family=@family,adress=@adreess";