程序中使用存储过程

来源:互联网 发布:网络信息安全培训总结 编辑:程序博客网 时间:2024/05/21 17:41
程序中有一种调用存储过程的标准方法:
{?=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  
原创粉丝点击