理論:
下面的CmdObj.是定義的SqlCommand對象
1、獲得預存程序中return語句返回的整個預存程序函數的傳回值:
//獲得預存程序return的值,定義一個參數,指明其作用是接受return的值
CmdObj.Parameters.Add("RETURN_VALUE", SqlDbType.Int).Direction =ParameterDirection.ReturnValue;
通過擷取該參數的方式最終獲得return返回的值
int reValue = int.Parse(CmdObj.Parameters["RETURN_VALUE"].Value.ToString());
2、獲得預存程序輸出參數的值:
定義sql的參數,指定類型是輸出
CmdObj.Parameters.Add("@outValue", SqlDbType.VarChar).Direction =ParameterDirection.Output;
獲得輸出參數的值
string outValue = CmdObj.Parameters["@outValue"].Value.ToString();
總結,關鍵地方就是指明參數的Direction 屬性,使用ParameterDirection來指定,可以指定4種類型,
輸入,
輸出,
既是輸入又是輸出,
接受return
=====================================================================
樣本:
/**
* 預存程序
*
create procedure queryStuNameById
(
@stuId varchar(10),--輸入參數
@stuName varchar(10) output --輸出參數
)
as
select @stuName=stuName from stuInfo where stuId=@stuId
*
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace StoreProduceTest
{
public class Program
{
static void Main(string[] args)
{
Operater op = new Operater();
string name = op.QueryStuNameById("1234");
Console.WriteLine(string.Format("學號為1234的學生的姓名為{0}", name));
}
}
public class Operater
{
private string ConStr = "server=.;database=User;uid=sa;pwd=1234";
private SqlConnection sqlCon = null;
private SqlCommand sqlComm = null;
SqlDataReader dr = null;
public string QueryStuNameById(string Id)
{
string name = "";
try
{
using (sqlCon = new SqlConnection(ConStr))
{
sqlCon.Open();
sqlComm = new SqlCommand("queryStuNameById", sqlCon);
//設定命令的類型為預存程序
sqlComm.CommandType = CommandType.StoredProcedure;
//設定參數
sqlComm.Parameters.Add("@stuId", SqlDbType.VarChar);
//注意輸出參數要設定大小,否則size預設為0,
sqlComm.Parameters.Add("@stuName", SqlDbType.VarChar, 10);
//設定參數的類型為輸出參數,預設情況下是輸入,
sqlComm.Parameters["@stuName"].Direction = ParameterDirection.Output;
//為參數賦值
sqlComm.Parameters["@stuId"].Value = "1234";
//執行
sqlComm.ExecuteNonQuery();
//得到輸出參數的值,把賦值給name,注意,這裡得到的是object類型的,要進行相應的類型輪換
name = sqlComm.Parameters["@stuName"].Value.ToString();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return name;
}
}
}