SQL Server 数据库:从 texbox 更改表值
本文关键字:texbox Server 数据库 SQL | 更新日期: 2023-09-27 18:30:26
我想更改 SQL Server 表中一列的值,使其不再按其他 2 列过滤。但它返回错误:语法不正确","。这是代码:
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Data Source=" + System.IO.File.ReadAllText("Server.ini") + ";" + "Initial Catalog=" + "lin2world" + ";" + "User ID=" + System.IO.File.ReadAllText("User.ini") + ";" + "Password=" + System.IO.File.ReadAllText("Password.ini");
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "'WHERE char_id='" + textBox1.Text + "' ,item_type='" + textBox2.Text + "' ";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
connection.Open();
dataadapter.Fill(ds, "user_item");
connection.Close();
MessageBox.Show("Item Amount Changed");
}
谢谢!
您在 WHERE
之前缺少一个空格。
并且您有一个要使用AND
的逗号.
像这样更改:
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "' WHERE char_id='" +
textBox1.Text + "' AND item_type='" + textBox2.Text + "' ";
sql,其中条件将使用AND
或OR
进行组合,因此您需要将逗号(textBox1.Text + "' ,item_type='" +
)替换为所需的表达式。
sql injection
方面,使用command parameters
来比较和更新值会好得多。
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Data Source=" + System.IO.File.ReadAllText("Server.ini") + ";" + "Initial Catalog=" + "lin2world" + ";" + "User ID=" + System.IO.File.ReadAllText("User.ini") + ";" + "Password=" + System.IO.File.ReadAllText("Password.ini");
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "' WHERE char_id='" + textBox1.Text + "' AND item_type='" + textBox2.Text + "' ";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
connection.Open();
dataadapter.Fill(ds, "user_item");
connection.Close();
MessageBox.Show("Item Amount Changed");
}
两个错误 - WHERE
前空格和WHERE
子句中缺少AND
拉吉
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "'WHERE char_id='" + textBox1.Text + "' ,item_type='" + textBox2.Text + "' ";
这里
,item_type=
","应为"和"或"或"
您需要在 ' 和 where
之间添加一个空格。另外,您正在进行更新并填充数据集?您只是想进行更新还是也想获取数据?
您应该在此处使用string.Format()
以使其更具可读性。此外,请考虑参数化查询,因为您将自己保留对 SQL 注入的开放状态。更好的是,放弃动态 sql 并替换为存储过程。
Tutorial on String.Format()
如果不使用数据集,请使用 ExecuteNonQuery()
private void button1_Click(object sender, EventArgs e)
{
string connectionString = @"Data Source=" + System.IO.File.ReadAllText("Server.ini") + ";" +
"Initial Catalog=" + "lin2world" + ";" + "User ID=" +
System.IO.File.ReadAllText("User.ini") + ";" + "Password=" +
System.IO.File.ReadAllText("Password.ini");
string sql = string.Format("UPDATE user_item SET amount='{0}' WHERE char_id='{1}' AND item_type='{2}'",
textBox3.Text, textBox1.Text, textBox2.Text);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(sql, connection);
command.Connection.Open();
command.ExecuteNonQuery();
}
MessageBox.Show("Item Amount Changed");
}
我强烈建议您不要使用此格式:
sql = "UPDATE user_item SET amount='" + textBox3.Text + "'WHERE char_id='" + textBox1.Text + "' ,item_type='" + textBox2.Text + "' ";
相反,您应该使用:
sql = String.format("UPDATE user_item SET amount=%d WHERE char_id=''%s'' and item_type=''%s''",textBox3.Text,textBox1.Text,textBox2.Text);
这种形式更加清晰,以避免错误。