C# 数据库存储过程的讲解应用
在使用VS 2012+SQL Server做簡(jiǎn)單的銷售系統(tǒng)中,通常會(huì)遇到一些使用存儲(chǔ)過程的情況,那究竟什么是存儲(chǔ)過程,它的好處是什么呢?如果在SQL Server中創(chuàng)建一個(gè)存儲(chǔ)過程,C#中怎樣聯(lián)系存儲(chǔ)過程呢?
一.存儲(chǔ)過程
存儲(chǔ)過程(Stored Procedure)是大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為完成特定功能的SQL程序代碼.它已經(jīng)過編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶可以通過制定的存儲(chǔ)過程名和參數(shù)來執(zhí)行它.至于存儲(chǔ)過程的好處:
1.執(zhí)行速度更快
存儲(chǔ)過程是在創(chuàng)建時(shí)被編譯和優(yōu)化過,調(diào)用一次后相關(guān)信息就保存在數(shù)據(jù)庫(kù)中,同時(shí)內(nèi)存會(huì)保留一份存儲(chǔ)過程,下次調(diào)用就可以直接從內(nèi)存中調(diào)用執(zhí)行,不占用CUP資源.
2.存儲(chǔ)過程可以減少網(wǎng)絡(luò)通信流量
一個(gè)百行T-SQL代碼的操作可以通過執(zhí)行一條過程代碼替換,且不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼.
3.存儲(chǔ)過程允許模塊化設(shè)計(jì)
當(dāng)創(chuàng)建后即可在程序中調(diào)用多次,這可以改進(jìn)應(yīng)用程序的可維護(hù)性,并允許與應(yīng)用程序統(tǒng)一訪問數(shù)據(jù)庫(kù).
4.存儲(chǔ)過程安全性更高
可以使用數(shù)據(jù)庫(kù)的安全機(jī)制限制對(duì)數(shù)據(jù)庫(kù)的訪問,如授權(quán)某用戶只能執(zhí)行不能修改存儲(chǔ)過程,同時(shí)它存儲(chǔ)過程可以加強(qiáng)應(yīng)用程序的安全性使其不受SQL注入工具.
5.存儲(chǔ)過程允許延遲綁定
可以穿件引用尚不存在的表,在創(chuàng)建存儲(chǔ)過程中只檢查語法,知道第一次執(zhí)行該存儲(chǔ)過程時(shí)才對(duì)其編譯,如果引用的表不存在能創(chuàng)建存儲(chǔ)過程,但運(yùn)行會(huì)失敗.
上面就是一些我對(duì)存儲(chǔ)過程的認(rèn)識(shí),推薦大家在做系統(tǒng)時(shí)盡量使用存儲(chǔ)過程.上面有些知識(shí)引致周志奎的《數(shù)據(jù)庫(kù)系統(tǒng)原理》,如果想更詳細(xì)的了解存儲(chǔ)過程,可以訪問該博客(推薦):http://www.cnblogs.com/tjsquall/archive/2008/02/04/1064402.html
?
二.SQLServer如何使用存儲(chǔ)過程
?
?如果在SQL Server中使用存儲(chǔ)過程呢?存儲(chǔ)過程的創(chuàng)建語句主要如下,當(dāng)創(chuàng)建完成可以通過execute執(zhí)行存儲(chǔ)過程:
create procedure 存儲(chǔ)過程名 [參數(shù)1,….參數(shù)n] as begin Transact SQL語句塊; End --執(zhí)行 execute 存儲(chǔ)過程名 [參數(shù)1,….參數(shù)n]舉個(gè)實(shí)例:我在數(shù)據(jù)庫(kù)中使用create創(chuàng)建了一張Telephone表,并使用Insert向該表中已經(jīng)插入了數(shù)據(jù),現(xiàn)在想使用存儲(chǔ)過程查詢具體手機(jī)品牌為”諾基亞”的手機(jī)信息,代碼如下:
-- =========================================== -- 創(chuàng)建存儲(chǔ)過程(一) -- 手機(jī)庫(kù)存查詢 查詢手機(jī)品牌 -- =========================================== --創(chuàng)建存儲(chǔ)過程 create procedure PSelcetPhoneName @Pname varchar(20) as begin select phonename as 手機(jī)品牌,phoneclass as 手機(jī)型號(hào),phoneid as 序列號(hào), price as 出廠價(jià)格,arrtime as 進(jìn)貨時(shí)間,period as 保修時(shí)間 from Telephone where phonename=@Pname end --刪除存儲(chǔ)過程 drop procedure PSelcetPhoneName --執(zhí)行存儲(chǔ)過程 execute PSelcetPhoneName '諾基亞'phonename=@Pname end --刪除存儲(chǔ)過程 drop procedure PSelcetPhoneName --執(zhí)行存儲(chǔ)過程 execute PSelcetPhoneName '諾基亞'當(dāng)執(zhí)行execut時(shí),會(huì)顯示如下信息:
同時(shí),下面在介紹一個(gè)更新的存儲(chǔ)過程的代碼,方便大家舉一反三.它的功能是把用戶名為”bbbbb”的用戶密碼更新為”123456”,用戶身份更新為”銷售員”.執(zhí)行代碼,再select查詢Users表可以發(fā)現(xiàn)信息更新.
-- =========================================== -- 創(chuàng)建存儲(chǔ)過程(五) -- 管理員修改員工信息存儲(chǔ)過程 -- =========================================== create procedure PUpdateUser (@pwd varchar(20),@role varchar(20),@name varchar(20)) as begin update Users set userpwd = @pwd,userrole=@role where username = @name end --執(zhí)行存儲(chǔ)過程 execute PUpdateUser '123456','銷售員','bbbbb'三.C# winform如何結(jié)合存儲(chǔ)過程
1.界面設(shè)計(jì)
設(shè)計(jì)界面如下圖所示,主要有dataGridView(顯示數(shù)據(jù)表格),button(按鈕),textBox組成.
2.源代碼講解
其核心代碼及步驟如下:
SqlConnection con = new SqlConnection("數(shù)據(jù)庫(kù)服務(wù)"); //定義SQL Server連接對(duì)象 SqlConnection.Open(); //打開數(shù)據(jù)庫(kù)連接 SqlCommand com = new SqlCommand("存儲(chǔ)過程名", 數(shù)據(jù)庫(kù)連接對(duì)象); //使用Command創(chuàng)建存儲(chǔ)過程 SqlCommand.CommandType = CommandType.StoredProcedure; //設(shè)置Command對(duì)象類型為存儲(chǔ)過程 SqlCommand.Parameters.Add(); //添加參數(shù)并賦值 SqlCommand.Parameters.Add("@Pname", SqlDbType.NVarChar, 20); //添加narchar(20)類型@Pname SqlCommand.ExecuteNonQuery(); //執(zhí)行存儲(chǔ)過程 SqlConnection.Close(); //關(guān)閉連接 SqlConnection.Dispose(); //釋放資源源代碼如下,先添加命名空間
//新加命名空間 using System.Data.SqlClient; using System.Reflection;點(diǎn)擊按鈕修改其函數(shù)如下
private void button1_Click(object sender, EventArgs e) {//定義數(shù)據(jù)庫(kù)連接語句:服務(wù)器=.(本地) 數(shù)據(jù)庫(kù)名=PhoneMS(手機(jī)管理系統(tǒng))string consqlserver = "Data Source=.;Initial Catalog=PhoneMS;Integrated Security=True;";//定義SQL Server連接對(duì)象SqlConnection con = new SqlConnection(consqlserver);//打開連接con.Open();//定義數(shù)據(jù)庫(kù)執(zhí)行一個(gè)SQL語句或存儲(chǔ)過程 SqlCommand com = new SqlCommand("PSelcetPhoneName", con);//指定類型為存儲(chǔ)過程 com.CommandType = CommandType.StoredProcedure; //存儲(chǔ)過程添加變量并賦值給textBox1 com.Parameters.Add("@Pname", SqlDbType.NVarChar, 20).Value = textBox1.Text.ToString();//定義獲取數(shù)據(jù)SqlDataAdapter da = new SqlDataAdapter(com);DataSet ds = new DataSet();try{da.Fill(ds); //填充數(shù)據(jù)dataGridView1.DataSource = ds.Tables[0]; //顯示在dataGridView中}catch (Exception msg){MessageBox.Show(msg.Message); //異常處理}finally{con.Close(); //關(guān)閉連接con.Dispose(); //釋放連接da.Dispose(); //釋放資源} }3.運(yùn)行結(jié)果
總結(jié):希望文章對(duì)大家有所幫助,作者已盡力,如果有不足和不喜歡的地方,見諒!
PS:作者遇到一個(gè)問題,在CSDN寫博客時(shí),命名1.2.3.4.5中行間距間隙很大,怎樣設(shè)置讓它緊挨著.希望知道的人告知,謝謝!
最后我自己解決了,采用的方法是在CSDN寫博客時(shí),點(diǎn)擊"源代碼"編輯文章,把<p></p>從其段落換成了<br />換行實(shí)現(xiàn)的,希望大家想縮小間距,也可這樣操作.
(By:Eastmount 2013-9-11 19點(diǎn)http://blog.csdn.net/eastmount)?
總結(jié)
以上是生活随笔為你收集整理的C# 数据库存储过程的讲解应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 数据库dataGridView刷新
- 下一篇: C# 数据库系统中使用GDI+绘制柱状图