C#高级编程:调用存储过程[1]
用一个命令对象调用存储过程 就是定义存储过程的名称 给过程的每个参数添加参数定义 然后用上一节中给出的方法执行命令
为了使本节的示例更有说服力 下面定义一组可以用于插入 更新和删除Northwind示例数据库中Region表的记录的存储过程 这个表尽管很小 但可以用于给每种常见的存储过程编写示例 调用没有返回值的存储过程
调用存储过程的最简单示例是不给调用者返回任何值 下面定义了两个这样的存储过程 一个用于更新现有的Region记录 另一个用于删除指定的Region记录
( ) 记录的更新 更新Region记录是很简单的 因为(假定主键码不能被更新)只有一个列可以更新 直接在SQL Server查询分析器中键入这些示例 或者运行本章下载代码中的StoredProcs sql文件 在该文件中包含本节中的所有存储过程
CREATE PROCEDURE RegionUpdate (@RegionID INTEGER @RegionDescription NCHAR( )) AS SET NOCOUNT OFF UPDATE Region SET RegionDescription = @RegionDescription WHERE RegionID = @RegionID GO
给真实世界中的表执行更新命令 需要重复选择和返回已更新的记录 这个存储过程有两个输入参数(@RegionID和@RegionDescription) 对数据库执行UPDATE语句
要在 NET代码中运行这个存储过程 需要定义一个SQL命令 并执行它 SqlCommand aCommand = new SqlCommand( RegionUpdate conn); aCommand CommandType = CommandType StoredProcedure; aCommand Parameters Add(new SqlParameter ( @RegionID SqlDbType Int RegionID )); aCommand Parameters Add(new SqlParameter( @RegionDescription SqlDbType NChar RegionDescription )); aCommand UpdatedRowSource = UpdateRowSource None;
这段代码创建了一个新SqlCommand对象aCommand 并把它定义为一个存储过程 然后 依次添加每个参数 最后把存储过程的结果设置为UpdateRowSource枚举中的一个值
该存储过程有两个参数 要更新的Region记录的惟一主键码 给这个记录的新描述 创建好命令后 就可以用下面的命令执行它 aCommand Parameters[ ] Value = ; aCommand Parameters[ ] Value = South Western England ; aCommand ExecuteNonQuery();
这几个命令设置了每个参数的值 然后执行存储过程 该过程没有返回值 因此使用ExecuteNonQuery就足够了 命令参数可以像前面那样依次设置 或者按照名称来设置
( ) 记录的删除 下一个存储过程可用于从数据库中删除一个Region记录 CREATE PROCEDURE RegionDelete (@RegionID INTEGER) AS SET NOCOUNT OFF DELETE FROM Region WHERE RegionID = @RegionID GO
这个过程只需要该记录的主键码值 下面的代码使用SqlCommand对象调用这个存储过程 SqlCommand aCommand = new SqlCommand( RegionDelete conn); aCommand CommandType = CommandType StoredProcedure; aCommand Parameters Add(new SqlParameter( @RegionID SqlDbType Int RegionID )); aCommand UpdatedRowSource = UpdateRowSource None;
这个命令只接收一个参数 如下面的代码所示 它执行RegionDelete存储过程 这是一个按照名称设置参数的示例 aCommand Parameters[ @RegionID ] Value= ; aCommand ExecuteNonQuery();
lishixinzhi/Article/program/net/201311/15502