ADO.NET的记忆碎片(八)

向数据库中提交数据
使用参数化SqlCommand提交更新
提交新行
可以执行参数化Insert查询,向表中添加新行。
例如需要执行下面的Insert的SQL语句:
insert into order(OrderID,ProductID,Quantity,UnitPrice)
values(@OrderID,@ProductID,@Quantity,@UnitPrice)
在C#中使用实例:

SqlConnection cn = new SqlConnection("连接字符串");
string strSQL = "insert into order(OrderID,ProductID,Quantity,UnitPrice)"
+" values(@OrderID,@ProductID,@Quantity,@UnitPrice)";
DataRow rowToInsert;//新行的数据就是在rowToInsert里面,这里没有数据,需要自己另行添加
SqlCommand cmdInsert = new SqlCommand(strSQL,cn);
cmdInsert.Parameters.AddWithValue("@OrderID",rowToInsert["OrderID"]);
cmdInsert.Parameters.AddWithValue("@ProductID", rowToInsert["ProductID"]);
cmdInsert.Parameters.AddWithValue("@Quantity", rowToInsert["Quantity"]);
cmdInsert.Parameters.AddWithValue("@UnitPrice", rowToInsert["UnitPrice"]);
try {
    int count = cmdInsert.ExecuteNonQuery();
    if (count == 1)
    {
        rowToInsert.AcceptChanges();
        Console.WriteLine("Query success,Affected 1 row!");
    }
    else if (count == 0)
    {
        Console.WriteLine("Query failed,Affected 0 row!");
    }
    else
    {
        Console.WriteLine("Query Affected {0} rows!",count);
    }
}catch(Exception ex) {
    Console.WriteLine("Query failed:{0}",ex.Message);
}


更新现有行
可以执行参数化Update查询,向表中修改现有行。
例如需要执行下面的Update的SQL语句:
update order set OrderID=@OrderID_New,ProductID=@ProductID_New,Quantity=@Quantity_New,UnitPrice=@UnitPrice_New
where OrderID=@OrderID_Old andProductID=@ProductID_Old and Quantity=@Quantity_Old and UnitPrice=@UnitPrice_Old
在C#中使用实例:

string strSQL1 = "update order set OrderID=@OrderID_New,ProductID=@ProductID_New,Quantity=@Quantity_New,UnitPrice=@UnitPrice_New"
+" where OrderID=@OrderID_Old and ProductID=@ProductID_Old and Quantity=@Quantity_Old andUnitPrice=@UnitPrice_Old";
DataRow rowToUpdate;//修改行的数据就是在rowToUpdate里面,这里没有数据,需要自己另行设置
SqlCommand cmdUpdate = new SqlCommand(strSQL1, cn);
cmdUpdate.Parameters.AddWithValue("@OrderID_New", rowToUpdate["OrderID"]);
cmdUpdate.Parameters.AddWithValue("@ProductID_New", rowToUpdate["ProductID"]);
cmdUpdate.Parameters.AddWithValue("@Quantity_New", rowToUpdate["Quantity"]);
cmdUpdate.Parameters.AddWithValue("@UnitPrice_New", rowToUpdate["UnitPrice"]);
cmdUpdate.Parameters.AddWithValue("@OrderID_Old", rowToUpdate["OrderID",DataRowVersion.Original]);
cmdUpdate.Parameters.AddWithValue("@ProductID_Old", rowToUpdate["ProductID", DataRowVersion.Original]);
cmdUpdate.Parameters.AddWithValue("@Quantity_Old", rowToUpdate["Quantity", DataRowVersion.Original]);
cmdUpdate.Parameters.AddWithValue("@UnitPrice_Old", rowToUpdate["UnitPrice", DataRowVersion.Original]);
try
{
    int count = cmdUpdate.ExecuteNonQuery();
    if (count == 1)
    {
        rowToUpdate.AcceptChanges();
        Console.WriteLine("Query success,Affected 1 row!");
    }
    else if (count == 0)
    {
        Console.WriteLine("Query failed,Affected 0 row!");
    }
    else
    {
        Console.WriteLine("Query Affected {0} rows!", count);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Query failed:{0}", ex.Message);
}

删除现有行
可以执行参数化Dalete查询,向表中删除现有行。
例如需要执行下面的Update的SQL语句:
delete order where OrderID=@OrderID and ProductID=@ProductID and Quantity=@Quantity andUnitPrice=@UnitPrice
在C#中使用实例:

string strSQL2 = "delete order"
+ " where OrderID=@OrderID and ProductID=@ProductID and Quantity=@Quantity andUnitPrice=@UnitPrice";
DataRow rowToDelete;//修改行的数据就是在rowToUpdate里面,这里没有数据,需要自己另行设置
SqlCommand cmdDelete = new SqlCommand(strSQL2, cn);
cmdDelete.Parameters.AddWithValue("@OrderID", rowToDelete["OrderID", DataRowVersion.Original]);
cmdDelete.Parameters.AddWithValue("@ProductID", rowToDelete["ProductID", DataRowVersion.Original]);
cmdDelete.Parameters.AddWithValue("@Quantity", rowToDelete["Quantity", DataRowVersion.Original]);
cmdDelete.Parameters.AddWithValue("@UnitPrice", rowToDelete["UnitPrice", DataRowVersion.Original]);
try
{
    int count = cmdDelete.ExecuteNonQuery();
    if (count == 1)
    {
        rowToDelete.AcceptChanges();
        Console.WriteLine("Query success,Affected 1 row!");
    }
    else if (count == 0)
    {
        Console.WriteLine("Query failed,Affected 0 row!");
    }
    else
    {
        Console.WriteLine("Query Affected {0} rows!", count);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Query failed:{0}", ex.Message);
}


使用SqlDataAdapter对象提交跟新
手动配置SqlDataAdapter对象
SqlDataAdapter对象公开了4个包含Command对象的属性:
SelectCommand属性是用来填充DataTable的
UpdateCommand,InsertCommand,DeleteCommand属性是用来提交挂起更改数据的
SqlDataAdapter的Update方法非常灵活。可以提供DataSet、DataSet与表名称、DataTable或DataRow数组。
无论如何调用SqlDataAdapter的Update方法,都会尝试通过适当的Command来提交挂起的更改。
使用实例:

SqlDataAdapter da = new SqlDataAdapter();
SqlParameterCollection pc;
SqlParameter p;
//设置InsertCommand属性
da.InsertCommand = new SqlCommand(strSQL, cn);
pc = da.InsertCommand.Parameters;
pc.Add("@OrderID", SqlDbType.Int, 0, "OrderID");
pc.Add("@ProductID", SqlDbType.Int, 0, "ProductID");
pc.Add("@Quantity", SqlDbType.SmallInt, 0, "Quantity");
pc.Add("@UnitPrice", SqlDbType.Int, 0, "UnitPrice");

//设置UpdateCommand属性
da.UpdateCommand = new SqlCommand(strSQL1, cn);
pc = da.UpdateCommand.Parameters;
pc.Add("@OrderID_New", SqlDbType.Int, 0, "OrderID");
pc.Add("@ProductID_New", SqlDbType.Int, 0, "ProductID");
pc.Add("@Quantity_New", SqlDbType.SmallInt, 0, "Quantity");
pc.Add("@UnitPrice_New", SqlDbType.Int, 0, "UnitPrice");
p = pc.Add("@OrderID_Old", SqlDbType.Int, 0, "OrderID");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@ProductID_Old", SqlDbType.Int, 0, "ProductID");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@Quantity_Old", SqlDbType.SmallInt, 0, "Quantity");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@UnitPrice_Old", SqlDbType.Int, 0, "UnitPrice");
p.SourceVersion = DataRowVersion.Original;

//设置DaleteCommand属性
da.UpdateCommand = new SqlCommand(strSQL1, cn);
pc = da.DeleteCommand.Parameters;
p = pc.Add("@OrderID", SqlDbType.Int, 0, "OrderID");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@ProductID", SqlDbType.Int, 0, "ProductID");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@Quantity", SqlDbType.SmallInt, 0, "Quantity");
p.SourceVersion = DataRowVersion.Original;
p = pc.Add("@UnitPrice", SqlDbType.Int, 0, "UnitPrice");
p.SourceVersion = DataRowVersion.Original;


在设置了这一新逻辑之后,只需要调用SqlDataAdapter的update方法,datatable作为参数提供,就可以对datatable中的更改,提交给数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值