——此文章摘自《C#高级编程(第
版)》定价
元 特价
元 购买
用一个命令对象调用存储过程就是定义存储过程的名称给过程的每个参数添加参数定义然后用上一节中给出的方法执行命令
为了使本节的示例更有说服力下面定义一组可以用于插入更新和删除Northwind示例数据库中Region表的记录的存储过程这个表尽管很小但可以用于给每种常见的存储过程编写示例
调用没有返回值的存储过程
调用存储过程的最简单示例是不给调用者返回任何值下面定义了两个这样的存储过程一个用于更新现有的Region记录另一个用于删除指定的Region记录
() 记录的更新
更新Region记录是很简单的因为(假定主键码不能被更新)只有一个列可以更新直接在SQL Server查询分析器中键入这些示例或者运行本章下载代码中的StoredProcssql文件在该文件中包含本节中的所有存储过程
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);
aCommandCommandType = CommandTypeStoredProcedure;
aCommandParametersAdd(new SqlParameter (@RegionIDSqlDbTypeIntRegionID));
aCommandParametersAdd(new SqlParameter(@RegionDescriptionSqlDbTypeNCharRegionDescription));
aCommandUpdatedRowSource = UpdateRowSourceNone;
这段代码创建了一个新SqlCommand对象aCommand并把它定义为一个存储过程然后依次添加每个参数最后把存储过程的结果设置为UpdateRowSource枚举中的一个值
该存储过程有两个参数要更新的Region记录的惟一主键码给这个记录的新描述创建好命令后就可以用下面的命令执行它
aCommandParameters[]Value = ;
aCommandParameters[]Value = South Western England;
aCommandExecuteNonQuery();
这几个命令设置了每个参数的值然后执行存储过程该过程没有返回值因此使用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);
aCommandCommandType = CommandTypeStoredProcedure;
aCommandParametersAdd(new SqlParameter(@RegionID SqlDbTypeInt RegionID));
aCommandUpdatedRowSource = UpdateRowSourceNone;
这个命令只接收一个参数如下面的代码所示它执行RegionDelete存储过程这是一个按照名称设置参数的示例
aCommandParameters[@RegionID]Value= ;
aCommandExecuteNonQuery();
[] []