唉,只怪自己學術不精,現在才學習SQL預存程序,從網上找了不少資料,可是很淩亂,定位也比較高,不適合我這樣的小菜學習,現在我就來總結一下C#使用SQL預存程序完整的流程,以SQL2005為例。
先簡單的說說什麼是預存程序:預存程序就是固化在SQL資料庫系統內部的SQL語句,這樣做的好處是可以提高執行效率、提高資料庫的安全性、減少網路流量。接下來就講解如何在資料庫中建立一個預存程序。
開啟SQL2055資料庫,展開“資料庫”節點,找到你使用的資料庫(目的資料庫),展開該資料庫節點,找到“可程式化性”節點並展開,就可以看到“預存程序”了,在“預存程序”上點擊右鍵,建立預存程序。然後會彈出查詢分析器,在這輸入建立代碼就可以了。
代碼如下:
create proc myinsert -- 建立一個預存程序,名稱為myinsert--這裡寫參數,如果有的話;沒有的話就空著as--這裡寫具體語句,可以寫N個go--可加可不加,go的意思是另起一頁,相當於下一個功能塊。如果下邊不寫語句,可以不加!
例如:
create proc myinsert@username varchar(10),--注意這裡的逗號,多個參數用逗號隔開@password varchar(10),@name varchar(10),@usertype varchar(10),@createpeople varchar(10)asinsert into SystemUsers(UserName,PassWord,Name,UserType,CreatPeople)values(@username,@password,@name,@usertype,@createpeople)go
這個預存程序可以向SystemUsers表中插入一條記錄。
以上講的是手動建立預存程序的方法,其實完全不必這麼麻煩,直接點擊SQL2005左上方的“建立查詢”,開啟查詢分析器,然後在上邊的語句中加入一句話:“use JF_Charging_System”意思就是使用某個資料庫,也就是在哪個資料庫中建立預存程序。
例如:
use JF_Charging_Systemgocreate proc myinsert@username varchar(10),@password varchar(10),@name varchar(10),@usertype varchar(10),@createpeople varchar(10)asinsert into SystemUsers(UserName,PassWord,Name,UserType,CreatPeople)values(@username,@password,@name,@usertype,@createpeople)go
下面再來講解如何在C#中調用預存程序。廢話不過說,一段完整的代碼+注釋讓你明白一切!這段C#代碼和上邊的預存程序是完全對應的。
string strsql = "Data Source=192.168.24.53;Initial Catalog=JF_Charging_System;Persist Security Info=True;User ID=sa;Password=1";//資料庫連結字串 string sql = "myinsert";//要調用的預存程序名 SqlConnection conStr = new SqlConnection(strsql);//SQL資料庫連接對象,以資料庫連結字串為參數 SqlCommand comStr = new SqlCommand(sql, conStr);//SQL語句執行對象,第一個參數是要執行的語句,第二個是資料庫連接對象 comStr.CommandType = CommandType.StoredProcedure;//因為要使用的是預存程序,所以設定執行類型為預存程序 //依次設定預存程序的參數 comStr.Parameters.Add("@username", SqlDbType.VarChar, 10).Value = "11"; comStr.Parameters.Add("@password", SqlDbType.VarChar, 10).Value = "11"; comStr.Parameters.Add("@name", SqlDbType.VarChar, 10).Value = "11"; comStr.Parameters.Add("@usertype", SqlDbType.VarChar, 10).Value = "11"; comStr.Parameters.Add("@createpeople", SqlDbType.VarChar, 10).Value = "11"; conStr.Open();//開啟資料庫連接 MessageBox.Show(comStr.ExecuteNonQuery().ToString());//執行預存程序 conStr.Close();//關閉串連
希望對大家有所協助!