`
wsql
  • 浏览: 11813001 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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中的更改,提交给数据库

分享到:
评论

相关推荐

    ADO.NET 4从入门到精通

    《ADO.NET 4从入门到精通》主要内容简介:ADO.NET是windows开发平台上的核心数据技术之一。《ADO.NET 4从入门到精通》是microsoft ADO.NET 4的入门教程,旨在帮助visual basic和c#开发人员了解ADO.NET及相关技术的...

    ADO.Net助手V1.00---一个获取ADO.Net连接字符串,测试SQL命令的辅助软件

    ADO.Net助手是一个获取ADO.Net连接字符串(支持Access,SQLite,SQLServer,MySQL和ORACLE),测试SQL命令,存储过程和数据库之间互导数据的辅助软件。ADO.Net助手还可以用来以插入SQL语句形式导出导入记录,目前提供了...

    ADO.NET考试上机题

    ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试上机题ADO.NET考试...

    ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较

    数据ADO.NET sql、LINQ to sql、ADO.NET Entity Framework(EF)数据库连接性能比较,主要比较了插入与读取的时间,读取里可以进行模糊检索

    基于ADO.NET的用户登陆与注册系统

    摘要:基于ASP.NET的WEB应用程序项目,使用程序语言C#,利用ADO.NET访问数据库,实现一个简易的用户登陆注册系统。主要实现的功能有用户登陆、用户注册、找回密码,... 关键字:ASP.NET;ADO.NET;WEB;vs2010;数据库

    Professional ADO .NET Programming

    Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming Professional ADO .NET Programming

    ADO.NET自己封装SqlHelper类

    ADO.NET自己封装SqlHelper类 1、简单封装 2、传递参数封装 3、参数可变封装

    ADO.NET数据库访问技术详细资料

    C#与数据库访问技术 ADO.NET(ActiveX Data Object.NET)是Microsoft公司开发的用于数据库连接的... ADO.NET还提供了对XML格式文档的支持,所以通过ADO.NET组件可以方便地在异构环境的项目间读取和交换数据。 ......

    ado.net操作oracle简单参数化sql操作

    关于ado.net简单的参数化查询,操作的是oracle数据库!关于ado.net简单的参数化查询,操作的是oracle数据库!

    ADO.NET 高级编程

    ADO.NET 高级编程,深入剖析ADO.NET类

    学生管理系统+ADO.NET+SQL2005

    学生管理系统源码,ADO.NET进行增删改查学生基本和系别信息,适合毕业设计。

    Microsoft ADO.NET Step by Step

    Table of Contents Microsoft ADO.NET Step by Step Introduction Part I - Getting Started with ADO.NET Chapter 1 - Getting Started with ADO.NET ...

    ADO.NET本质论

    讲解了数据结构,演示了如何用ADO.NET来解决具体的数据访问问题。重点讨论了ADO.NET如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问API(包括OLE DB,ADO...

    ADO.Net数据库访问(代码示例)

    ADO.Net数据库访问(代码示例),介绍了ADO.Net数据库访问的核心技术

    ADO.NET 4从入门到精通源代码

    ADO.NET 4从入门到精通源代码 里面有 未完成的和已完成的 源代码示例

    ADO.NET高级编程

    ADO.NET是Microsoft最新推出的数据访问技术。作为.NET框架的一部分,ADO.NET绝不仅仅是前一版本ADO的简单升级。ADO.NET提供了一组.NET类,这些类不仅可以帮助我们对各种数据源进行高效访问,使我们能够对数据...

    Codesmith ADO.NET 模版

    Codesmith ADO.NET 模版Codesmith ADO.NET 模版Codesmith ADO.NET 模版Codesmith ADO.NET 模版Codesmith ADO.NET 模版Codesmith ADO.NET 模版

    Pro ADO.NET Data Services: Working with RESTful Data

    Pro ADO.NET Data Services: Working with RESTful Data Paperback: 336 pages Publisher: Apress; 1 edition (December 2, 2008) Language: English ISBN-10: 143021614X ISBN-13: 978-1430216148 Format: PDF You...

    ADO.net操作数据库总结

    ADO.net操作数据库总结,包括SqlConnection、SqlCommand等

    ADO.NET技术内幕 part4

    本书是使用Microsoft Visual Studio .NET和ADO.NET编写高可伸缩性、可用Web数据库应用程序的开发人员必备指南。介绍了如何使用ADO.NET在企业级的Web应用程序中访问、排序和处理数据。通过书中丰富的实例和工具,读者...

Global site tag (gtag.js) - Google Analytics