【问题标题】:update database using SqlDataAdapter in C#在 C# 中使用 SqlDataAdapter 更新数据库
【发布时间】:2015-09-20 11:33:30
【问题描述】:

我有以下代码可以在单击按钮时更新我的​​数据库表,但它不起作用。

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

【问题讨论】:

  • 你不应该提交你的交易吗?
  • 在这里看不到 EF 的任何部分。 SqlDataAdapter 是 ADO.NET 的一部分,用于旧的数据库驱动应用程序。它用于连接断开的部分(DataTableDataSet)和数据库。如果您不将数据存储在DataTableDataSet 中,则不要使用SqlDataAdapterSqlCommand 就是你所需要的。

标签: c# sql-server-2012 sqldataadapter


【解决方案1】:

我对您的实体框架实现感到困扰,但后来没有使用该框架来实现它的设计......

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

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

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

【讨论】:

    【解决方案2】:

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

    完全摆脱SqlDataAdapter,只需执行命令:

    sqlCmd.ExecuteNonQuery();
    

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

    【讨论】:

    • 亲爱的大卫感谢您的关注,我忘记了我使用的是模型构建器实体框架而不是数据集。
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2014-11-18
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多