五.創建簡單存儲過程的數據庫應用程序
下面我們就運用上述的不帶參數的存儲過程來一個數據庫應用程序
其中還用到了ADO
NET中的SqlDataAdapter對象以及DataSet對象
其中的SqlDataAdapter對象作為SQL Server數據庫和DataSet對象的橋梁將兩者聯系在一起
SqlDataAdapter對象包含了兩個常用的方法
Fill()方法和Update()方法
其中的Fill()方法能從數據庫中獲取相應數據並填充到DataSet對象中
而Update()方法顧名思義就是更新數據集的意思了
在調用Fill()方法以前
我們必須設置好SqlDataAdapter對象的SelectCommand屬性
該屬性其實是一個SqlCommand對象
SelectCommand屬性中包含有效的SQL語句
並能據此從數據庫中獲取相應數據並填充到DataSet對象中
首先
我們創建一個Windows Forms應用程序
編程語言為C#
在Visual Studio
NET中創建一個新的項目後
給該項目添加一個新的類-Publishers類
該類封裝了連接到後台數據庫並獲取數據集對象的業務邏輯
步驟如下
.添加必要的命名空間引用
using System
Data
SqlClient;
.給該類添加如下一些必要的變量
.在該類的構造函數中完成連接後台數據庫
獲取SqlDataAdapter對象等業務邏輯
.最後為該類提供一個GetPublisherInfo()方法
該方法用SqlDataAdapter對象填充DataSet對象並返回填充後的DataSet對象
方法如下(值得注意的是
SqlDataAdapter對象會隱式地打開數據庫連接並在獲取數據後隱式地關閉連接
這就是說DataSet對象是工作在非連接模式下的
而當你顯式地打開數據庫連接並獲取數據後
SqlDataAdapter對象並不會將該連接關閉)
完成Publishers類的設計後
我們給主窗體添加一個DataGrid控件並用它來顯示DataSet對象中的數據
首先給主窗體類添加如下成員變量
這樣該應用程序一啟動主窗體的DataGrid控件中便顯示了運用上述不帶參數的存儲過程從Pubs數據庫中獲取的相應數據
程序運行圖示如下
六.創建帶參數的存儲過程的數據庫應用程序
上面我們創建了一個不帶參數的存儲過程的應用程序
下面我們就來創建一個更加復雜的數據庫應用程序
在實際的數據庫應用中
我們往往需要獲取數據並更新
插入或刪除數據
這時我們就需要用到帶有參數的存儲過程了
同時在運用SqlDataAdapter對象時
我們會調用它的Update()方法
該Update()方法會自動根據DataSet對象中的DataTable對象內各條記錄的變化情況完成相應操作
SqlDataAdapter對象還包含了UpdateCommand
InsertCommand
DeleteCommand等屬性
這些屬性其實都是SqlCommand對象
Update()方法會根據操作的類型選用相應的屬性
在運用帶有參數的存儲過程建立數據庫應用程序時
我們一般都要用到SqlParameter類
該類封裝了各種與Sql參數相關的屬性和方法
其中的屬性包括了ParameterName
SqlDBType
Direction
Size
Value
SourceColumn以及SourceVersion等
其中ParameterName
SqlDBType
Direction
Size等屬性是用於匹配存儲過程中定義的參數的
比如下面定義的SqlParameter對象就是用來匹配前面定義的up_UpdatePublisherInfo存儲過程中的
@pub_id
參數的
SqlParameter updParam = new SqlParameter(
@pub_id
SqlDbType
Char
);
在上面的定義中
雖然Direction屬性沒有明確地給出
但是它的默認值為Input
所以也就滿足了我們的需要
而如果一個SqlParameter對象的Direction屬性為InputOutput或Output或ReturnValue
那麼其Direction屬性就必須明確地說明了
比如下面的代碼就明確地聲明了一個SqlParameter對象的Direction屬性為Output
oParam
Direction = ParameterDirection
Output;
其中的SourceColumn屬性是用於匹配一個DataTable對象中的DataColumn對象的
這種匹配能在調用Update()方法更新DataTable對象時隱式地導入所需的SqlParameter對象
如果在定義時沒有聲明該屬性
那麼你必須在代碼中顯式地說明SqlParameter對象的SourceColumn屬性
其中的SourceVersion屬性的默認值是DataRow對象相應字段中的當前值
也就是要更新到數據庫中的值
當然
SourceVersion屬性也可以指向DataRow對象相應字段中的原始值
也即從數據庫中獲取的初始值
在數據庫事務處理系統中
數據的同步性問題非常重要
下面我們來建立一個能檢測數據同步性的存儲過程
接著
我們在上面的應用程序中調用該存儲過程以更新發行商的名稱
首先
在原有應用程序的基礎上完善其業務邏輯類-Publishers類
應用程序的業務邏輯類完善之後
在主窗體上添加一個名為
更新數據集
的按鈕
並添加該按鈕的事件響應函數如下
到此為止
應用程序的業務邏輯類和主窗體類都已經更新完畢
現在的應用程序能根據用戶的改用更新數據庫中的相關內容了
運行程序如圖
所示
你在更新了數據後還可以打開SQL Server中的相應表並驗證數據有沒有更新成功
七.總結
本文向大家介紹了存儲過程的基本知識以及在
NET數據庫應用程序中如何結合SqlDataAdapter對象
DataSet對象等構建數據驅動的應用程序
在本文中
我們運用到了兩類存儲過程
一類為簡單的不帶參數的存儲過程
其運用方法相對容易
另一類為帶有參數的存儲過程
在調用該類存儲過程時還得運用到SqlParameter對象
同時
我們不難發現將數據更新業務邏輯封裝在存儲過程中是一種很好的設計方法
它能提高應用程序的可管理性
可擴展性以及數據庫的安全性
類似的
插入數據以及刪除數據的業務邏輯也可以封裝在存儲過程中並以相似的方法在應用程序中被運用
最後
希望本文對大家有不少幫助
源代碼文件下載
StoredProc
zip
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22065.html