我一直在尝试环顾四周并解决此问题,并且已经尝试了好几个小时,所以我决定询问其他人。 我正在
“ UPDATE语句中的语法错误。”
单击“保存”按钮时。
这是我的代码:
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "update Profiles set [PROFILE NAME]='" + textBox1.Text + "', [LOGIN EMAIL]='" + textBox2.Text + "', [PASSWORD]='" + textBox3.Text + "', [FULL NAME]='" + textBox4.Text + "', [CARD NUMBER]='" + textBox5.Text + "', [EXP MONTH]='" + comboBox1.Text + "', [EXP YEAR]='" + comboBox2.Text + "', CVV='" + textBox6.Text + "', where ID=" + textBox7.Text + "";
command.CommandText = query;
command.ExecuteNonQuery();
connection.Close();
MessageBox.Show("Profile Saved");
RefreshDBConnection();
更新代码:
ConnectToDataBase();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
//string query = "update Profiles set [PROFILE NAME]='" + textBox1.Text + "', [LOGIN EMAIL]='" + textBox2.Text + "', [PASSWORD]='" + textBox3.Text + "', [FULL NAME]='" + textBox4.Text + "', [CARD NUMBER]='" + textBox5.Text + "', [EXP MONTH]='" + comboBox1.Text + "', [EXP YEAR]='" + comboBox2.Text + "', CVV='" + textBox6.Text + "' where ID='" + Convert.ToInt32(textBox7.Text) + "'";
string query = "update Profiles set [PROFILE NAME]= @Profile, [LOGIN EMAIL]= @Email, [PASSWORD]= @Pass, [FULL NAME]= @Name, [CARD NUMBER]= @Card, [EXP MONTH]= @EXPM, [EXP YEAR]= @EXPY, CVV= @CVV where ID = '" +textBox7.Text+ "'";
command.Parameters.AddWithValue("@Profile", textBox1.Text);
command.Parameters.AddWithValue("@Email", textBox2.Text);
command.Parameters.AddWithValue("@Pass", textBox3.Text);
command.Parameters.AddWithValue("@Name", textBox4.Text);
command.Parameters.AddWithValue("@Card", Convert.ToInt32(textBox5.Text));
command.Parameters.AddWithValue("@EXPM", Convert.ToInt32(comboBox1.Text));
command.Parameters.AddWithValue("@EXPY", Convert.ToInt32(comboBox2.Text));
command.Parameters.AddWithValue("@CVV", Convert.ToInt32(textBox6.Text));
command.CommandText = query;
command.ExecuteNonQuery();
connection.Close();
MessageBox.Show("Profile Saved");
RefreshDBConnection();
this.Close();
答案 0 :(得分:1)
在,
语句之前,您还有一个逗号Where
:
CVV='" + textBox6.Text + "', where
只需将其删除。并且,如果类型为整数textBox7.Text
,则应将ID= '" + Convert.ToInt32(textBox7.Text) + "'
转换为int(不要忘记用单引号引起来)。另外,您应始终使用parameterized queries来避免SQL Injection。像这样:
string query = "update Profiles set [PROFILE NAME]= @Profile,... where ID = @Id";
command.Parameters.AddWithValue("@Profile", textBox1.Text);
command.Parameters.AddWithValue("@Id", textBox7.Text);//Or Convert.ToInt32(textBox7.Text)
尽管直接指定类型并使用Value
属性比AddWithValue
更好:
command.Parameters.Add("@Profile", SqlDbType.VarChar).Value = textBox1.Text;
command.Parameters.Add("@Id", SqlDbType.Int).Value = Convert.ToInt32(textBox7.Text);
当然,建议始终使用using
语句。
答案 1 :(得分:1)
另一个原因可能是,您从文本框中读取的值可能包含特殊字符,这会使语法在串联到SQL字符串时无效。 使用参数查询时,也可以避免这种情况。
答案 2 :(得分:0)
CVV='" + textBox6.Text + "', where
您必须在此处删除逗号。
最好使用参数,因为有几个参数。像这样发送它们会在将来引起问题。因此,我建议您使用cmd.Parameters.Add();
而不是原始用法。另外,如果ID为整数,则必须Convert.ToInt32(textBox7.Text);