大多数的时候,我们对数据库的更新,读取等都是通过存储过程来操作的。存储过程更加快速和容易调整。这样就要求熟悉如何在SqlDataAdapter上调用存储过程,当然也可以不通过SqlDataAdapter来调用,直接调用在前面里面已经说过了。

下面是关于SqlDataAdapter如何更新数据的一个示例:

里面关于配置文件可以参考前面的文章

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;namespace DataDemo
{class Program{private static string GetConnectionStringsConfig(string connectionName){string connectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString.ToString();Console.WriteLine(connectionString);return connectionString;}public static void ManufactureProductDataTable(DataSet ds){DataTable products = new DataTable("Products");products.Columns.Add(new DataColumn("ProductID", typeof(int)));products.Columns.Add(new DataColumn("ProductName", typeof(string)));products.Columns.Add(new DataColumn("SupplierID", typeof(int)));products.Columns.Add(new DataColumn("CategoryID", typeof(int)));products.Columns.Add(new DataColumn("QuantityPerUnit", typeof(string)));products.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));products.Columns.Add(new DataColumn("UnitsInStock", typeof(short)));products.Columns.Add(new DataColumn("UnitsOnOrder", typeof(short)));products.Columns.Add(new DataColumn("RecordLevel", typeof(short)));products.Columns.Add(new DataColumn("Discontinued", typeof(bool)));ds.Tables.Add(products);}private static SqlCommand GenerateSelectCommand(SqlConnection conn){SqlCommand cmd = new SqlCommand("RegionSelect", conn);cmd.CommandType = CommandType.StoredProcedure;cmd.UpdatedRowSource = UpdateRowSource.None;return cmd;}private static SqlCommand GenerateInsertCommand(SqlConnection conn){SqlCommand cmd = new SqlCommand("RegionInsert", conn);cmd.CommandType = CommandType.StoredProcedure;SqlParameter para1 = new SqlParameter("@RegionDescription", SqlDbType.NChar);para1.Value = "North West";cmd.Parameters.Add(para1);SqlParameter para2 = new SqlParameter("@RegionID", SqlDbType.Int);para2.Direction = ParameterDirection.Output;cmd.Parameters.Add(para2);cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;return cmd;}static void Main(string[] args){string source = GetConnectionStringsConfig("Northwind");string select = "SELECT * FROM Products";SqlConnection conn = new SqlConnection(source);conn.Open();// Use customized tableSqlDataAdapter cmd = new SqlDataAdapter(select, conn);DataSet ds = new DataSet();ManufactureProductDataTable(ds);cmd.Fill(ds, "Products");foreach (DataRow row in ds.Tables["Products"].Rows)Console.WriteLine("'{0}' from {1}", row[0], row[1]);// Use stored procedure on adapterDataSet ds2 = new DataSet();SqlDataAdapter da2 = new SqlDataAdapter();da2.SelectCommand = GenerateSelectCommand(conn);da2.Fill(ds2, "Region");foreach (DataRow row in ds2.Tables["Region"].Rows)Console.WriteLine("'{0}' is {1}", row[0], row[1]);// Use dataset to read XML fileDataSet ds3 = new DataSet();ds3.ReadXml(".\\MyData.xml");foreach (DataRow row in ds3.Tables[0].Rows)Console.WriteLine("'{0}' comes {1}", row[0], row[1]);// Insert a row to region tableDataSet ds4 = new DataSet();SqlDataAdapter da3 = new SqlDataAdapter();da3.InsertCommand = GenerateInsertCommand(conn);da3.InsertCommand.ExecuteNonQuery();da3.SelectCommand = GenerateSelectCommand(conn);da3.Fill(ds4, "Region");foreach (DataRow row in ds4.Tables["Region"].Rows)Console.WriteLine("'{0}' is {1}", row[0], row[1]);// Close SQL connectionconn.Close();Console.ReadKey();}}
}

InsertCommand调用的时候不要忘记这句话:

da3.InsertCommand.ExecuteNonQuery();

不然是不执行的,但是selectCommand却是可以不用这句话的。

在调用

da3.InsertCommand.ExecuteNonQuery()

之前,要确保conn是open的,也就是这句话要有

conn.Open();

开始没注意,害的我找了半天不知道错哪儿了o(╯□╰)o

下面这个是来自MSDN上SqlDataAdapter的一个示例,展示各种command

public static SqlDataAdapter CreateCustomerAdapter(SqlConnection connection)
{SqlDataAdapter adapter = new SqlDataAdapter();// Create the SelectCommand.SqlCommand command = new SqlCommand("SELECT * FROM Customers " +"WHERE Country = @Country AND City = @City", connection);// Add the parameters for the SelectCommand.command.Parameters.Add("@Country", SqlDbType.NVarChar, 15);command.Parameters.Add("@City", SqlDbType.NVarChar, 15);adapter.SelectCommand = command;// Create the InsertCommand.command = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " +"VALUES (@CustomerID, @CompanyName)", connection);// Add the parameters for the InsertCommand.command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");adapter.InsertCommand = command;// Create the UpdateCommand.command = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +"WHERE CustomerID = @oldCustomerID", connection);// Add the parameters for the UpdateCommand.command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");SqlParameter parameter = command.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");parameter.SourceVersion = DataRowVersion.Original;adapter.UpdateCommand = command;// Create the DeleteCommand.command = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);// Add the parameters for the DeleteCommand.parameter = command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");parameter.SourceVersion = DataRowVersion.Original;adapter.DeleteCommand = command;return adapter;
}

转载于:https://www.cnblogs.com/herbert/archive/2010/07/14/1777292.html

SqlDataAdapter上调用存储过程相关推荐

  1. 在ASP.NET中调用存储过程方法

    两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的"官方"方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后 ...

  2. 在ASP.NET中调用存储过程方法新解

    摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程 在使用.N ...

  3. C# 调用存储过程操作 OUTPUT参数和Return返回值

    本文转载:http://www.cnblogs.com/libingql/archive/2010/05/02/1726104.html 存储过程是存放在数据库服务器上的预先编译好的sql语句.使用存 ...

  4. 水晶报表调用存储过程的问题

    前言:现在碰到了水晶报表调用存储过程的问题,问题是这样的:ERP软件里有很多的数据表,有些报表的字段要从多个数据表里取数据,并且要对数据进行处理,来作为报表的字段,我看了些资料,说可以通过存储过程来取 ...

  5. ASP调用存储过程返回了一个参数和一个记录集时出现ADODB.Recordset 错误 '800a0e78'...

    在测试服务器上给sql server2005 打上了sp3补丁,发现有一个调用存储过程的页面报错 ADODB.Recordset 错误 '800a0e78' 对象关闭时,不允许操作. 以为是sp3的缘 ...

  6. PreparedStatement和CallableStatement都可以调用存储过程

    2019独角兽企业重金招聘Python工程师标准>>> 他们都可以调用存储过程,上午收了下主要区别.但是等于放屁,说了一大推也没说个所以然,就看见了这一句,说是CallableSta ...

  7. ASP调用存储过程详解。

    ASP与存储过程(Stored Procedures)的文章不少,但是我怀疑作者们是否真正实践过.我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事.对于简单的应用,这些资 ...

  8. 通用权限管理系统组件 (GPM - General Permissions Manager) 给信息管理系统加一个初始化的功能,调用存储过程...

    系统初始化的运行效果如下: 参数表是为了防止反复被初始化的,防止关键数据丢失. 其实很多人都提过希望有系统初始化的功能,最近稍微空一些,就给系统增加了一个初始化的功能,给大家参考一下. 首先写了一个存 ...

  9. java异步调用数据库存储过程详解,java中如何调用存储过程

    create procedure getsum @n int =0 as declare @sum int declare @i int set @sum=0 set @i=0 while @i 在线 ...

最新文章

  1. 新型攻击接踵而来 思科Talos解析Jaff勒索软件
  2. php uncaught thrown,PHP异常详解
  3. 美国滴滴打人上线,约架神器如何玩转暴力社区?
  4. 关于学习新技术的方法
  5. 面向对象2(构造方法、抽象类、接口)
  6. 全视曲面屏设计,三星S8又一次走在了行业创新的最前沿
  7. go程序的跨平台编译
  8. dot Net Frameworks中常见的设计模式
  9. 简述计算机的英语作文,初中计算机的英语作文
  10. 信息学奥赛C++语言:小玉家的电费
  11. java对mysql的简单操作——增删改查的总结
  12. 【Flink】flink报错:This type GenericType pojo cannot be used as key
  13. 如何用一句话证明你是程序员?
  14. 【渝粤教育】电大中专就业指导 (4)作业 题库
  15. P-Called-Party-ID 头域的应用说明
  16. 所有惠普BIOS版本介绍惠普HP笔记本驱动
  17. 电容单位F法拉、mF毫法、纳法nF、皮法pF之间是如何转换
  18. eclipse插件开发:把自定义的文件类型使用xml编辑器打开
  19. 编程中如何不使用中间变量的情况下将两个变量的值进行交换
  20. 怎样把word文档里的html格式去掉,word文档去除格式

热门文章

  1. Exchange Server 2003 Cluster
  2. 毫秒级的时间处理上G的图片(生成缩略图)
  3. 【spring boot2】第2篇:配置文件YAML语法
  4. Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
  5. linux 系统命令
  6. Protocol Buffers java
  7. 关于mysql数据库插入数据,不能插入中文和出现中文乱码问题
  8. 关于如何修改Redmine系统中的字段问题解答
  9. MySQL学习笔记_9_MySQL高级操作(上)
  10. 浏览器本地存储的使用