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");
    }

谢谢!

SQL Server 数据库:从 texbox 更改表值

您在 WHERE 之前缺少一个空格。

并且您有一个要使用AND的逗号.

像这样更改:

string sql = "UPDATE user_item SET amount='" + textBox3.Text + "' WHERE char_id='" + 
                        textBox1.Text + "' AND item_type='" + textBox2.Text + "' ";

sql,其中条件将使用ANDOR进行组合,因此您需要将逗号(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);

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