C#調用帶輸入輸出參數的存儲過程

//調用存儲過程執行類似於
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受 3個參數分別用來表示用戶名、用戶密碼、用戶權限
4public bool GetUserinfo(string username,string pwd,string grade)
5    {
6      //獲取連接字符串
7      private bool 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;
42          }
43          else
44          {
45            return false;
46          }
47        }
48      }
49    }

   至於業務邏輯層及表示層這裏就不做介紹了,想必大家都知道該如何寫了.

   注:這裏補充點有關清空DataGradeView中所有數據de思路方法

  Code

1//用dataGradeView.DataSource dataGradeView的數據源創建一個DataTable 對象 需要強轉成DataTable
2
3   DataTable dt=(DataTable )dataGradeView.DataSource; 
4 //dataGradeView爲具體的dataGradeView
5
6   dt.Rows.Clean(); //刪除表中的行
7
8   dataGradeView.DataSource=dt; 
9//再把dt綁定到dataGradeView上即可

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     sql語句執行的時候要先編譯,然後執行。存儲過程(Stored Procedure)是一組爲了完成特定功能的SQL語句集,經編譯後存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。

優點:

      允許模塊化程序設計,只需創建一次存儲過程,並將其存儲在數據庫中,以後可在程序中調用該過程任意次

      執行效益高

      減少網絡流量

      可保證數據的安全性和完整性

分類:

      系統存儲過程 以sp_開頭並存放在master數據庫中

      擴展存儲過程 以xp_開頭

      用戶自定義存儲過程 用戶自己定義

這裏重點介紹用戶自定義存儲過程

      自定義存儲過程又分爲兩種:帶參數的存儲過程及不帶參數的存儲過程

      帶參數的存儲過程又分爲:帶輸入參數的存儲過程和帶輸出參數的存儲過程

存儲過程語法規則:

create proc[edure](關鍵字,中括號內爲可選內容) procName(存儲過程名字)

@參數 數據類型=默認值, (輸入參數)

@參數 數據類型 output(輸出參數必須加上output)

as

sql語句

go

刪除存儲過程

創建的存儲過程位於sysobjects表中

if exists(select * from sysobjects where name='存儲過程名字')

drop proc 存儲過程

go

存儲過程執行使用關鍵字exec

執行無參存儲過程

exec 存儲過程名

執行輸入參數存儲過程

如:

exec 存儲過程 參數值

執行輸出參數的存儲過程要求定義變量用來接受存儲過程的返回值

declare @count int (數據類型需和存儲過程中輸出參數類型一致)

exec 存儲過程 輸出參數 output (output不能少)

print 輸出參數 (用於顯示輸出參數)

創建無參的存儲過程

查詢student表中所有記錄

if exists(select * from sysobjects where name='proc_select')

drop proc proc_select

go

create proc proc_select

as

select * from student

go

執行存儲過程

exec proc_select 效果類似於 select * from student

創建帶輸入參數的存儲過程

比如根據用戶名查詢用戶密碼

if exists(select * from sysobjects where name='proc_username')

drop proc proc_username

go

create proc proc_username

@username varchar(50)

as

select pwd from userinfo where username=@username

執行存儲過程:

exec proc_username admin (或@username=admin)

創建帶輸出參數的存儲過程執行時需要自定義一個變量用來接受存儲過程返回的值

比如查詢userinfo表中有多少條記錄

if exists(select * from sysobjects where name='proc_num')

drop proc proc_num

go

create proc proc_num

@count int output (output不能少,不能賦默認值)

as

select @count=count(*) from userinfo

go

執行存儲過程

declare @n int

exec proc_num @n output (output不能少)

go

print @n 顯示錶中有多少條記錄

      注:定義參數時多個參數間用逗號隔開而不是分號最後一個參數逗號可省略

 

發佈了66 篇原創文章 · 獲贊 7 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章