關於儲存過程的介紹大家想必也不陌生了吧。大家可以參考《**儲存過程》一文,這裡不做介紹。 今天要介紹的是在c#裡如何呼叫帶輸入輸出引數的儲存過程。譬如實現簡單的登陸功能,根據使用者輸入的使用者名稱、使用者密碼及
今天要介紹的是在c#裡如何呼叫帶輸入輸出引數的儲存過程。譬如實現簡單的登陸功能,根據使用者輸入的使用者名稱、使用者密碼及使用者許可權實現登陸。這裡充當輸入引數的有:使用者名稱、使用者密碼、登陸許可權。充當輸出引數的就是在資料庫裡面根據輸入引數的資訊查詢資料庫中是否有記錄。具體來說就是記錄的行數。
資料庫中的儲存過程構建**:
code
1use hotel --資料庫名
2if exists(select * from sysobjects where name='proc_userinfo')--判斷是否存在儲存過程
3drop proc proc_userinfo --若存在刪除此儲存過程
4go5--建立儲存過程
6create proc proc_userinfo
7@username varchar(50),--輸入引數
8@pwd varchar(50),--輸入引數
9@grade varchar(20),--輸入引數
10@count int output --輸出引數output不能少
11--sql語句
12as
13select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade
14go
1516
17執行儲存過程
18declare @n int
19exec proc_userinfo admin,123,管理員,@n output
20--output不能少
21print @n
22go
資料訪問層**
code
1//呼叫儲存過程執行類似於
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受三個引數分別用來表示使用者名稱、使用者密碼、使用者許可權
4public bool getuserinfo(string username,string pwd,string grade)
5 {
6 //獲取連線字串
7 private string connstring = configurationmanager.connectionstrings["connstring"].tostring();
8 int n = 0;//查詢後返回的行數儲存儲存過程中的輸出引數
9 //建立連線物件 using**片段好處在於離開作用域後立刻從記憶體中釋放物件
10 using (sqlconnection con=new sqlconnection(connstring))
11 {
12 con.open();//開啟資料庫連線
13 using (sqlcommand cmd=new sqlcommand("proc_userinfo",con))
14 {
15 //什麼作用不記得了只記得呼叫儲存過程該語句不能少
16 cmd.commandtype = commandtype.storedprocedure;
17 //新增儲存過程輸入輸出引數型別及輸入引數值
18 cmd.parameters.add("@username", sqldbtype.varchar, 50).value=username;
19 cmd.parameters.add("@pwd", sqldbtype.varchar, 50).value=pwd;
20 cmd.parameters.add("@grade", sqldbtype.varchar, 50).value=grade;
21 cmd.parameters.add("@count", sqldbtype.int);
22 cmd.parameters["@username"].dbtype = dbtype.string;
23 //指定引數型別是輸入引數還是輸出引數
24 cmd.parameters["@username"].direction = parameterdirection.input;
25 cmd.parameters["@pwd"].dbtype = dbtype.string;
26 //指定引數型別是輸入引數還是輸出引數
27 cmd.parameters["@pwd"].direction = parameterdirection.input;
28 cmd.parameters["@grade"].dbtype = dbtype.string;
29 //指定引數型別是輸入引數還是輸出引數
30 cmd.parameters["@grade"].direction = parameterdirection.input;
31 cmd.parameters["@count"].dbtype = dbtype.int32;
32 //指定引數型別是輸入引數還是輸出引數
33 cmd.parameters["@count"].direction = parameterdirection.output;
34 //執行儲存過程 此處類似於查詢語句
35 cmd.executescalar();
36 //接受執行儲存過程後的返回值
37 n = (int)cmd.parameters["@count"].value;
38 //根據返回值判斷資料庫中是否存在對應使用者名稱密碼及使用者許可權的記錄
39 if (n==1)
40 {
41 return true;
C 中呼叫SQL儲存過程 帶輸入輸出引數的例子
理論 下面的cmdobj.是定義的sqlcommand物件 1 獲得儲存過程中return語句返回的整個儲存過程函式的返回值 獲得儲存過程return的值,定義乙個引數,指明其作用是接受return的值 cmdobj.parameters.add return value sqldbtype.int...
C 中呼叫SQL儲存過程 帶輸入輸出引數的例子
c 中呼叫sql儲存過程 帶輸入輸出引數的例子 理論 下面的cmdobj.是定義的sqlcommand物件 1 獲得儲存過程中return語句返回的整個儲存過程函式的返回值 獲得儲存過程return的值,定義乙個引數,指明其作用是接受return的值 cmdobj.parameters.add re...
Oracle帶輸入輸出引數的儲存過程
一 使用輸入引數 需求 在emp copy中新增一條記錄,empno為已有empno的最大值 1,ename不能為空且長度必須大於0,deptno為60。建立儲存過程 create or replace procedure insert emp emp name in varchar2,dept n...