我想更改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");
}
谢谢!
答案 0 :(得分:5)
您在WHERE
之前缺少空格。
您有一个逗号,您想要使用AND
。
像这样改变:
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "' WHERE char_id='" +
textBox1.Text + "' AND item_type='" + textBox2.Text + "' ";
答案 1 :(得分:1)
使用AND
或OR
合并条件的sql,因此您需要将逗号(textBox1.Text + "' ,item_type='" +
)替换为所需的表达式。
对sql injection
而言,使用command parameters
来比较和更新的值会更好。
答案 2 :(得分:0)
您需要在'和where
之间添加一个空格。此外,您正在进行更新并填充数据集?您只是想要进行更新还是想要获取数据?
您应该在这里使用string.Format()
以使其更具可读性。另外,请考虑parameterized query,因为您可以向sql injections开放。更好的是,抛弃动态sql并替换为stored procedure。
如果您没有使用数据集,请使用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");
}
答案 3 :(得分:0)
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "'WHERE char_id='" + textBox1.Text + "' ,item_type='" + textBox2.Text + "' ";
这里
,item_type=
','应该是'和“或”或“
答案 4 :(得分:0)
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
之前的空格和AND
子句中缺少的WHERE
拉吉
答案 5 :(得分:-1)
我强烈建议您不要使用以下格式:
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);
此表格更加清晰,以避免错误。