程序中使用存储过程

本文介绍了一种标准方法来调用存储过程,并展示了如何通过参数传递输入和输出值,包括使用 ParameterDirection 枚举来指定参数方向。
程序中有一种调用存储过程的标准方法:
{?=CALL MyStoredProc(?,?,?)}
最初的参数标记表示的是过程调用的返回值,如查不准备使用返回的值,也可以忽略它。去掉返回的参数后,查询语法变为如下形式:
{CALL GetCustomer(?)}
这种用法不依赖CommandType属性。如果想要查询一个名称中包含特殊字符(如空格)的表格 ,视图或是存储过程 ,那么在这样的情况下将CommandType属性设置 为TableDirect或是SoredProcedure,对象名称中的分隔符将无法识别。需要手动添加 分隔符。这并不适合于所有的Command对象。如,SqlComman对象可以自动 ,准确地确定 对象名称的间隔。当然,如果没有在表格及存储过程的名称中放置空格,那么就不要考虑这些问题。
Parameter对象有一个Direction属性,能接收ParameterDirection枚举类型中的值:ReturnValue,Input,InputOutput以及Output。属性默认值为Input。要想从该存储过程获取信息,需要对参数的Direction属性设置。
存储过程用返参数来表明成功或失败。

try
            
{
                SqlConnection conn 
= new SqlConnection(strConn);
                  conn.Open(); 
                DataTable table 
= new DataTable();
                SqlCommand cmd 
= conn.CreateCommand();
              
                cmd.CommandText 
= "{?=CALL GetCustomers(?,?,?,?)}";
                cmd.Parameters.Add(
"@RetVal", SqlDbType.Int);
                cmd.Parameters.Add(
"@CustomerID", SqlDbType.Char, 5);
                cmd.Parameters.Add(
"@CompanyName", SqlDbType.VarChar, 40);
                cmd.Parameters.Add(
"@ContactName", SqlDbType.VarChar, 30);
                cmd.Parameters.Add(
"@ContactTitle", SqlDbType.VarChar, 30);

                cmd.Parameters[
"@ContactTitle"].Direction = ParameterDirection.Output;
                cmd.Parameters[
"@RetVal"].Direction = ParameterDirection.ReturnValue;
                cmd.Parameters[
"@CustomerID"].Value = "ALFKI";
                cmd.Parameters[
"@CompanyName"].Direction = ParameterDirection.Output;
                cmd.Parameters[
"@ContactName"].Direction = ParameterDirection.Output;

                cmd.ExecuteNonQuery();
                
                
if(Convert.ToInt32(cmd.Parameters["@RetVal"].Value)==0)
                
{
                     label1.Text
=cmd.Parameters["@CompanyName"].Value.ToString();
                }

存储过程:

CREATE PROCEDURE GetCustomers(@CustomerID nchar(5),  
                              @CompanyName nvarchar(
40) OUTPUT,  
                              @ContactName nvarchar(
30) OUTPUT,  
                              @ContactTitle nvarchar(
30) OUTPUT) AS  
SELECT @CompanyName
=CompanyName,@ContactName=ContactName,  
  @ContactTitle
=ContactTitle  
FROM Customers WHERE CustomerID
=@CustomerID  
IF @@ROWCOUNT
=1  
      RETURN 
0  
ELSE  
      RETURN 
-1  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值