在 C# 中使用 SqlDataAdapter 更新数据库
update database using SqlDataAdapter in C#
我有以下代码可以在单击按钮时更新我的数据库 table,但它不起作用。
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();
}
为什么要尝试使用 SqlDataAdapter
来执行 UPDATE
语句?当使用 SqlCommand
对象构建 SqlDataAdapter
时,该命令对象表示适配器的 SELECT
命令。 UPDATE
语句不会 select 任何东西,SELECT
命令不会更新任何东西。
完全摆脱 SqlDataAdapter
并执行命令:
sqlCmd.ExecuteNonQuery();
您可能还想添加一些错误处理,这样异常就不会到达 UI(并确保连接在错误情况下正确关闭)。您似乎也没有对该 Transaction
对象执行任何操作,因此您也可以摆脱它。
我对您实施 Entity Framework 感到困扰,但 没有 使用框架的设计...
您已经配置了数据适配器和命令,甚至打开了连接...但是您还没有真正执行命令。
sqlCmd.ExecuteNonQuery();
我理解你的实际业务逻辑可能已经被这个简单的CRUD操作所取代,但是我们使用Entity Framework的主要原因是为了避免在我们的业务中写任何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();
}
}
这本身可能不是一个很好的解决方案,但它使用框架来完成您试图手动执行的操作。
我有以下代码可以在单击按钮时更新我的数据库 table,但它不起作用。
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();
}
为什么要尝试使用 SqlDataAdapter
来执行 UPDATE
语句?当使用 SqlCommand
对象构建 SqlDataAdapter
时,该命令对象表示适配器的 SELECT
命令。 UPDATE
语句不会 select 任何东西,SELECT
命令不会更新任何东西。
完全摆脱 SqlDataAdapter
并执行命令:
sqlCmd.ExecuteNonQuery();
您可能还想添加一些错误处理,这样异常就不会到达 UI(并确保连接在错误情况下正确关闭)。您似乎也没有对该 Transaction
对象执行任何操作,因此您也可以摆脱它。
我对您实施 Entity Framework 感到困扰,但 没有 使用框架的设计...
您已经配置了数据适配器和命令,甚至打开了连接...但是您还没有真正执行命令。
sqlCmd.ExecuteNonQuery();
我理解你的实际业务逻辑可能已经被这个简单的CRUD操作所取代,但是我们使用Entity Framework的主要原因是为了避免在我们的业务中写任何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();
}
}
这本身可能不是一个很好的解决方案,但它使用框架来完成您试图手动执行的操作。