閱讀450 返回首頁    go 魔獸


C# 數據庫存儲過程的講解應用

在使用VS 2012+SQL Server做簡單的銷售係統中,通常會遇到一些使用存儲過程的情況,那究竟什麼是存儲過程,它的好處是什麼呢?如果在SQL Server中創建一個存儲過程,C#中怎樣聯係存儲過程呢?

一.存儲過程

存儲過程(Stored Procedure)是大型數據庫係統中,一組為完成特定功能的SQL程序代碼.它已經過編譯後存儲在數據庫中,用戶可以通過製定的存儲過程名和參數來執行它.至於存儲過程的好處:
1.執行速度更快
存儲過程是在創建時被編譯和優化過,調用一次後相關信息就保存在數據庫中,同時內存會保留一份存儲過程,下次調用就可以直接從內存中調用執行,不占用CUP資源.
2.存儲過程可以減少網絡通信流量

一個百行T-SQL代碼的操作可以通過執行一條過程代碼替換,且不需要在網絡中發送數百行代碼.
3.存儲過程允許模塊化設計

當創建後即可在程序中調用多次,這可以改進應用程序的可維護性,並允許與應用程序統一訪問數據庫.
4.存儲過程安全性更高

可以使用數據庫的安全機製限製對數據庫的訪問,如授權某用戶隻能執行不能修改存儲過程,同時它存儲過程可以加強應用程序的安全性使其不受SQL注入工具.
5.存儲過程允許延遲綁定

可以穿件引用尚不存在的表,在創建存儲過程中隻檢查語法,知道第一次執行該存儲過程時才對其編譯,如果引用的表不存在能創建存儲過程,但運行會失敗.
上麵就是一些我對存儲過程的認識,推薦大家在做係統時盡量使用存儲過程.上麵有些知識引致周誌奎的《數據庫係統原理》,如果想更詳細的了解存儲過程,可以訪問該博客(推薦):
https://www.cnblogs.com/tjsquall/archive/2008/02/04/1064402.html

二.SQLServer如何使用存儲過程

 如果在SQL Server中使用存儲過程呢?存儲過程的創建語句主要如下,當創建完成可以通過execute執行存儲過程:

create procedure 存儲過程名 [參數1,….參數n]
as
begin
Transact SQL語句塊;
End
--執行
execute 存儲過程名 [參數1,….參數n]

舉個實例:我在數據庫中使用create創建了一張Telephone,並使用Insert向該表中已經插入了數據,現在想使用存儲過程查詢具體手機品牌為諾基亞的手機信息,代碼如下:

-- ===========================================
-- 創建存儲過程(一)
-- 手機庫存查詢 查詢手機品牌
-- ===========================================
--創建存儲過程
create procedure PSelcetPhoneName
@Pname varchar(20)
as
begin
select phonename as 手機品牌,phoneclass as 手機型號,phoneid as 序列號,
price as 出廠價格,arrtime as 進貨時間,period as 保修時間
from Telephone where phonename=@Pname
end
--刪除存儲過程
drop procedure PSelcetPhoneName
--執行存儲過程
execute PSelcetPhoneName '諾基亞'

當執行execut時,會顯示如下信息:

同時,下麵在介紹一個更新的存儲過程的代碼,方便大家舉一反三.它的功能是把用戶名為”bbbbb”的用戶密碼更新為”123456”,用戶身份更新為銷售員”.執行代碼,select查詢Users表可以發現信息更新.

-- ===========================================
-- 創建存儲過程(五)
-- 管理員修改員工信息存儲過程
-- ===========================================
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
--執行存儲過程
execute PUpdateUser '123456','銷售員','bbbbb'

三.C# winform如何結合存儲過程

1.界麵設計

設計界麵如下圖所示,主要有dataGridView(顯示數據表格),button(按鈕),textBox組成.

2.源代碼講解

其核心代碼及步驟如下:

SqlConnection con = new SqlConnection("數據庫服務");            //定義SQL Server連接對象
SqlConnection.Open();                                          //打開數據庫連接
SqlCommand com = new SqlCommand("存儲過程名", 數據庫連接對象);     //使用Command創建存儲過程
SqlCommand.CommandType = CommandType.StoredProcedure;          //設置Command對象類型為存儲過程
SqlCommand.Parameters.Add();                                   //添加參數並賦值 
SqlCommand.Parameters.Add("@Pname", SqlDbType.NVarChar, 20);   //添加narchar(20)類型@Pname
SqlCommand.ExecuteNonQuery();                                  //執行存儲過程
SqlConnection.Close();                                         //關閉連接
SqlConnection.Dispose();                                       //釋放資源

源代碼如下,先添加命名空間

//新加命名空間
using System.Data.SqlClient;
using System.Reflection;

點擊按鈕修改其函數如下

private void button1_Click(object sender, EventArgs e)
{
    //定義數據庫連接語句:服務器=.(本地) 數據庫名=PhoneMS(手機管理係統)
    string consqlserver = "Data Source=.;Initial Catalog=PhoneMS;Integrated Security=True;";
    //定義SQL Server連接對象
    SqlConnection con = new SqlConnection(consqlserver);
    //打開連接
    con.Open();
    //定義數據庫執行一個SQL語句或存儲過程                   
    SqlCommand com = new SqlCommand("PSelcetPhoneName", con);
    //指定類型為存儲過程  
    com.CommandType = CommandType.StoredProcedure;  
    //存儲過程添加變量並賦值給textBox1    
    com.Parameters.Add("@Pname", SqlDbType.NVarChar, 20).Value = textBox1.Text.ToString();
    //定義獲取數據
    SqlDataAdapter da = new SqlDataAdapter(com);
    DataSet ds = new DataSet();

    try
    {
        da.Fill(ds);                                  //填充數據
        dataGridView1.DataSource = ds.Tables[0];      //顯示在dataGridView中
    }
    catch (Exception msg)
    {
        MessageBox.Show(msg.Message);                  //異常處理
    }
    finally
    {
        con.Close();                                   //關閉連接
        con.Dispose();                                 //釋放連接
        da.Dispose();                                  //釋放資源
    }
}

3.運行結果

總結:希望文章對大家有所幫助,作者已盡力,如果有不足和不喜歡的地方,見諒!
PS:作者遇到一個問題,在CSDN寫博客時,命名1.2.3.4.5中行間距間隙很大,怎樣設置讓它緊挨著.希望知道的人告知,謝謝!
最後我自己解決了,采用的方法是在CSDN寫博客時,點擊"源代碼"編輯文章,把<p></p>從其段落換成了<br />換行實現的,希望大家想縮小間距,也可這樣操作.

(By:Eastmount 2013-9-11 19點https://blog.csdn.net/eastmount

最後更新:2017-04-03 15:21:46

  上一篇:go MOM係列文章之 - JMS2 spec. 解讀
  下一篇:go 上大學=讀書?