Winforms上的SQL更新语句

n6lpvg4x  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(171)

我还在学习C#,我想问一下更新语句,我在更新数据时遇到了一个问题...过程是成功的,但数据库中的数据没有更新...我在这方面做错了吗?

MySqlConnection con = new MySqlConnection("server=127.0.0.1;database=cproject;Uid=root;Pwd=admin");
MySqlDataAdapter oDA;
DataTable oDT = new DataTable();
MySqlCommand job;
private void button1_Click(object sender, EventArgs e)
{
     job = new MySqlCommand("UPDATE barang SET Nama_barang = '"+txtNama+"' AND Jumlah_barang='"+txtStock+"' AND Harga_awal='"+txtBeli+"' AND Harga_jual='"+txtJual+"' WHERE ID = '"+txtIndex+"'", con);
     try
     {
        con.Open();
        job.ExecuteNonQuery();
        MessageBox.Show("sukses");
        con.Close();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
}

我做错什么了吗?

bxfogqkk

bxfogqkk1#

少量说明:您在这里尝试了SQL UPDATE的错误语法,如果您必须更新更多列,那么每个列都应该用逗号分隔,而不是用AND,还有一件事您必须注意的是,您的代码为黑客通过injection打开了一扇大门,要关闭这扇大门,您必须使用参数化查询。另一件事(但不确定),名称txtNamatxtStock等看起来像文本框的名称,如果这样,您还必须使用其.Text属性。如果没有使用正确的命名约定。
简单来说,你的代码应该像下面这样:

MySqlCommand sqlCommand = new MySqlCommand("UPDATE barang SET Nama_barang =@Nama_barang,Jumlah_barang=@Jumlah_barang,Harga_awal=@Harga_awal,Harga_jual=@Harga_jual WHERE ID =@id", con);
sqlCommand.Parameters.AddWithValue("@Nama_barang", txtNama.Text);
sqlCommand.Parameters.AddWithValue("@Jumlah_barang", txtStock.Text);
sqlCommand.Parameters.AddWithValue("@Harga_awal", txtBeli.Text);
sqlCommand.Parameters.AddWithValue("@Harga_jual", txtJual.Text);
sqlCommand.Parameters.AddWithValue("@id", txtIndex.Text);
try
{
   con.Open();
   sqlCommand.ExecuteNonQuery();
   MessageBox.Show("sukses");
   con.Close();
}
catch (Exception ex)
{
   MessageBox.Show(ex.Message);
}

如果值属于不同的类型,可以尝试.Parameters.Add()

vsdwdz23

vsdwdz232#

我相信你有来自TextBox的值,因为Naming显示txtNamatxtStock,所以它应该是txtNama.TexttxtStock.Text。另一个我认为应该是的是,DB中的表不会都是Varchar字段。对于Varchar字段,我们需要'Value',但是对于int或数字,我们不应该使用'value',而应该使用value。因此,您的查询应该如下所示

"UPDATE barang SET Nama_barang = '" + txtNama.Text + "', Jumlah_barang=" + txtStock.Text + ", Harga_awal=" + txtBeli.Text + ", Harga_jual='" + txtJual.Text + "' WHERE ID = " + txtIndex.Text

我不确定哪些字段是数字。所以我只是删除了一些我认为是数字的''。现在你应该使用Using语句和Parameterized Query来处理SQL注入。这样你的代码看起来就像

private void button1_Click(object sender, EventArgs e)
{

    using (SqlConnection connection = new SqlConnection(connectionString))
        using (SqlCommand command = connection.CreateCommand())
        { 
            command.CommandText = "UPDATE barang SET Nama_barang = @namabarang, Jumlah_barang = @Jumlahbarang, Harga_awal= @Hargaawal, Harga_jual=@Hargajual WHERE ID = @myID";
            command.Parameters.AddWithValue("@namabarang", txtNama.Text);
            command.Parameters.AddWithValue("@Jumlahbarang", txtStock.Text);
            command.Parameters.AddWithValue("@Hargaawal", txtNama.Text);
            command.Parameters.AddWithValue("@Hargajual", txtBeli.Text);
            command.Parameters.AddWithValue("@myID", txtJual.Text);
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        } 
}

相关问题