SQL Server数据库:从文本框更改表值

时间:2013-09-06 06:33:30

标签: c# sql-server

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

谢谢!

6 个答案:

答案 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)

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

sql injection而言,使用command parameters来比较和更新的值会更好。

答案 2 :(得分:0)

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

您应该在这里使用string.Format()以使其更具可读性。另外,请考虑parameterized query,因为您可以向sql injections开放。更好的是,抛弃动态sql并替换为stored procedure

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

答案 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);

此表格更加清晰,以避免错误。