今天又有朋友問起關於c#調用預存程序的問題,發現自己好久沒用,竟然也忘得差不多了。還好以前在其它部落格裡也有寫過,結果。。。自然是解決了。
本來想直接把以前那片拿過來的,但是感覺還是重新寫一下讓自己印象深刻點。
調試環境:VS.NET 2005,SQL 2000,WINDOWS XP sp2。
語言:C#
調用帶輸入參數的預存程序
首先自然是在查詢分析器裡建立一個預存程序嘍~~ 如下所示:
create proc proc_1
@uid int,
@pwd varchar(255)
as
select UserName from users where uid = @uid and PassWord = @pwd
go
接下來我們就來看下如何在VS 2005中使用C#調用這個預存程序。
方法一:
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();//開啟資料庫連接
SqlCommand cmd = new SqlCommand("exec proc_1 @uid=1,@pwd=admin", conn);//Command中寫調用預存程序的語句
//大家應該看出來了和直接在查詢分析器中執行很類似,“exec 預存程序名 @參數1=參數值,@參數2=參數值”
SqlDataReader sdr = cmd.ExecuteReader();//執行預存程序
while (sdr.Read())
{
Response.Write(sdr["UserName"].ToString());//輸出查詢到的值
}
sdr.Close();
conn.Close();
方法二:
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();//開啟資料庫連接
SqlCommand cmd = new SqlCommand("proc_1", conn);//預存程序名
cmd.CommandType = CommandType.StoredProcedure;//設定命令類型為預存程序
SqlParameter[] param = new SqlParameter[]{
new SqlParameter("uid", SqlDbType.Int, 4),
new SqlParameter("pwd", SqlDbType.VarChar,255),
};//定義參數,這些是預存程序中要調用的參數,也可以通過直接使用cmd.AddWithValue方法添加參數
param[0].Value = 1;//給參數賦值
param[1].Value = "admin";
cmd.Parameters.AddRange(param);//一定要記得將剛定義的參數添加到cmd的參數中,不然前面的參數就白弄了。
string sname =(string)cmd.ExecuteScalar();//如果預存程序返回的是單個值,我們可以直接這樣取出所要的值
Response.Write(sname);
sdr.Close();
conn.Close();
調用帶輸出參數的預存程序
上面所講的只是調用輸入參數的預存程序,下面大概講一下如何調用有輸出參數的預存程序。
首先,我們先對之前的預存程序修改一下,如下所示:
create proc proc_1
@uid int,
@pwd varchar(255),
@UserName varchar(255) output --這裡我們增加一個輸出變數,記得加上output
as
select @UserName=UserName from users where uid = @uid and PassWord = @pwd
go
--以下是在查詢分析器中調用的方法
declare @n varchar(255) --聲明一個變數用來傳遞參數
exec proc_1 1,admin,@n output --注,要標記為output變數
print @n
下面我們看看在VS.NET 中的調用方式:
SqlConnection conn = new SqlConnection("server=(local);database=sql1;uid=sa;pwd=");
conn.Open();
SqlCommand cmd = new SqlCommand("proc_1", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("uid", 1);
cmd.Parameters.AddWithValue("pwd", "admin");
cmd.Parameters.Add("username", SqlDbType.VarChar, 255);
cmd.Parameters["username"].Direction = ParameterDirection.Output;//設定參數為輸出參數
cmd.ExecuteNonQuery();
string sname = (string)cmd.Parameters["username"].Value;//擷取輸出參數的值
Response.Write(sname);
conn.Close();
這樣,便很簡單的實現了調用預存程序的方法。