在c#中使用SqlDataAdapter更新数据库

本文关键字:SqlDataAdapter 更新 数据库 | 更新日期: 2023-09-27 18:13:49

我有下面的代码更新我的数据库表时,按钮被点击,但它不工作。

protected void Button_Click(object sender, EventArgs e)
{
    HasinReservation.Entities.Db.Transaction dt = new Transaction();
    SqlConnection connection = new SqlConnection(
        @"Data Source=192.x.x.x'Sql2008;Initial Catalog=GardeshgariKish;User ID=cms;Password=xxxxx;MultipleActiveResultSets=True;Application Name=EntityFramework");
    connection.Open();
    SqlCommand sqlCmd = new SqlCommand(
        "Update Transaction SET IsCancelled = 1 WHERE BarCodeNumber = @Value1", connection);
    SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
    string barcode = dgvData.Rows[0].Cells[12].Text;
    sqlCmd.Parameters.AddWithValue("Value1", barcode);
    connection.Close();
}

在c#中使用SqlDataAdapter更新数据库

我对你的实体框架的实现感到困扰,但随后不是使用框架来设计它…

你已经配置了你的数据适配器和命令,甚至打开了连接…但是您并没有实际执行该命令。

sqlCmd.ExecuteNonQuery();

我明白你的实际业务逻辑可能已经被这个简单的CRUD操作所取代,但是我们使用实体框架的主要原因是避免在我们的业务逻辑中编写任何T-SQL。为什么不使用框架提交更改呢?

protected void Button3_Click(object sender, EventArgs e)
{
    // cancel the selected transaction
    string selectedBarcode = dgvData.Rows[0].Cells[12].Text;
    using(var dataContext = new HasinReservation.Entities.Db())
    {
        var transaction = dataContext.Transaction.Single(t => t.Barcode == selectedBarcode);
        transaction.IsCancelled = true;
        dataContext.SaveChanges();
    }
}

这本身可能不是一个很好的解决方案,但它使用框架来完成您试图手动执行的操作。

为什么要使用SqlDataAdapter来执行UPDATE语句?当用SqlCommand对象构造SqlDataAdapter时,该命令对象表示适配器的SELECT命令。UPDATE语句不选择任何东西,SELECT命令不更新任何东西。

完全去掉SqlDataAdapter,只执行命令:

sqlCmd.ExecuteNonQuery();

您可能还需要添加一些错误处理,以便异常不会到达UI(并确保在错误条件下正确关闭连接)。你似乎也没有对Transaction对象做任何事情,所以你也可以把它删掉。