0

我想更改 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");
    }

谢谢!

4

6 回答 6

5

您之前缺少一个空格WHERE

你有一个逗号你想使用的地方AND

像这样改变:

string sql = "UPDATE user_item SET amount='" + textBox3.Text + "' WHERE char_id='" + 
                        textBox1.Text + "' AND item_type='" + textBox2.Text + "' ";
于 2013-09-06T06:35:20.770 回答
1

sql where 条件将通过使用ANDor组合,OR因此您需要将逗号 ( textBox1.Text + "' ,item_type='" +) 替换为所需的表达式。

sql injection此外,将,command parameters用于比较和更新的值会更好。

于 2013-09-06T06:35:59.077 回答
0

您需要在 ' 和 . 之间添加一个空格where。另外,您正在更新并填充数据集?您只是想进行更新还是同时尝试获取数据?

您应该string.Format()在此处使用以使其更具可读性。此外,请考虑参数化查询,因为您对sql injections持开放态度。更好的是,放弃动态 sql 并替换为存储过程

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");
}
于 2013-09-06T06:36:09.860 回答
0
string sql = "UPDATE user_item SET amount='" + textBox3.Text + "'WHERE char_id='" + textBox1.Text + "' ,item_type='" + textBox2.Text + "' ";

这里

,item_type= ',' 应该是 "and" 或 "or"

于 2013-09-06T06:37:15.333 回答
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和缺失ANDWHERE

拉吉

于 2013-09-06T06:37:38.517 回答
-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);

这种形式更加清晰,以避免错误。

于 2013-09-06T06:40:04.823 回答