當前位置:編程學習大全網 - 編程語言 - 程序庫

程序庫

使用存儲過程更新數據庫以上示例使用存儲過程從數據庫中獲取信息。在壹些復雜的應用程序中,存儲過程經常用於更新、插入和刪除記錄。讓我們看看如何使用ADO.NET來完成這些操作。作為第壹個例子,我們將允許Visual Studio?巫師在。NET為我們編寫了壹組存儲過程,並創建了相應的代碼來使用這些過程。雖然我們只需要為這個示例編寫最少的代碼,但是仔細查看向導創建的代碼可以幫助我們理解與存儲過程交互的過程,以便我們可以執行除獲取數據之外的其他操作。對於此示例,我們將使用Northwind示例數據庫中的Customers表。安裝Northwind數據庫時,它不包含用於更新、插入或刪除客戶的存儲過程,而是包含Visual Studio中的DataAdapter配置向導。NET可以很容易的寫壹些存儲過程。啟動新的Windows應用程序項目。在空白表單1上,放置壹個數據網格和兩個按鈕。和前面壹樣,更改DataGrid的Anchor屬性來定位所有四條邊。將按鈕命名為btnFill和btnUpdate,並將它們的文本屬性分別更改為Fill和Update。轉到工具箱的“數據”選項卡,將壹個SqlDataAdapter控件拖到窗體上,然後釋放它。這將打開壹個DataAdapter配置向導。單擊“下壹步”按鈕開始在向導中輸入信息。首先,您需要選擇壹個到Northwind數據庫的連接,或者如果列表中沒有可用的連接,請單擊“新建連接”按鈕來創建壹個連接。然後單擊下壹步按鈕。下壹個屏幕包含三種可選的數據訪問方式。這個屏幕如圖2所示。

圖二。為DataAdapter選擇數據訪問類型在這裏,大多數演示軟件示例將使用第壹個選項來使用SQL語句。但是,我們將使用第二個選項,讓向導為我們創建壹些存儲過程。選擇“創建新的存儲過程”選項,然後單擊“下壹步”按鈕。下壹個屏幕需要壹個SQL語句來指示最初從數據庫獲得的數據。但是,這個SQL語句並不是直接使用的。該SQL語句中的信息將用於構建實際數據訪問的存儲過程。為了使這個例子簡單明了,輸入SQL語句SELECT * FROM Customers,然後按Next按鈕。這裏,向導要求輸入要創建的存儲過程的名稱。有四個存儲過程—選擇、更新、插入和刪除操作。命名如下:?6?1 choice:MSDNSelectCustomers?6?1更新:MSDNUpdateCustomer?6?1 Insert:MSDNInsertCustomer?6?1 delete:MSDNDeleteCustomer保留選項“是,在數據庫中為我創建它們”。此時,向導屏幕應該如圖3所示。

圖3。命名DataAdapter向導將創建的存儲過程,然後單擊Next按鈕。向導將創建這些存儲過程,並在狀態屏幕上顯示它們的進度。完成後,您可以單擊“完成”按鈕退出向導。該向導創建了壹個完全配置的DataAdapter,但沒有創建數據集來保存數據。接下來我們就來做這個操作。從工具箱的“數據”選項卡中,拖動壹個數據集控件。當顯示其配置屏幕時,選擇非類型化數據集。現在,您可以使用DataAdapter來填充數據集。在btnFill的Click事件中,添加下面兩行代碼:sqldataadapter 1 . fill(dataset 1," customers ")datagrid 1 . data source = dataset 1 . tables(" customers ")在btnUpdate的Click事件中,添加下面壹行代碼:SQL DataAdapter 1。更新(數據集1,“客戶”)現在,我們有了壹個可以正常工作的演示軟件,它使用存儲過程進行數據訪問。您可以運行程序並單擊Fill按鈕來獲得網格中的用戶列表。然後,您可以編輯網格中的用戶數據,並選擇Update按鈕將這些更改返回到數據庫。註意如果編輯第壹列(即CustomerID ),將會發生異常,因為您無法在SQL Server中更新數據庫記錄中的主鍵。查看向導生成的代碼很有啟發性,這些代碼最初都隱藏在Windows窗體設計器生成的代碼區域中。單擊此區域中相應的加號展開代碼。註意下面這段代碼,這些代碼實例化了SQLDataAdapter及其四個命令對象:me . sqldata adapter 1 = new system . data . sqlclient . sqldata adapter()。我。SqlSelectCommand1 =新系統。Data.SqlClient.SqlCommand() Me。SqlInsertCommand1 =新系統。data . sqlclient . sqlcommand()me . sqlupdatecommand 1 = new system . data . sqlclient . sqlcommand()me . sqldeletecommand 1 = new system . data . sqlclient . sqlcommand()再往下,您將看到用於配置每個命令對象並為其創建參數集的代碼。這段代碼類似於前面使用帶參數的存儲過程的示例中的代碼。但是,向導生成的代碼使用壹些附加的參數屬性,以允許它們與更改數據的各種存儲過程壹起使用。例如,為SQLInsertCommand1創建CompanyName參數的代碼:me . SQL insert command 1 . parameters . add(new _ system . data . sqlclient . SQL parameter(" @ companyname ",_ system . data . sqldbtype . nvarchar,40," company name "))在前面的示例中,我們只設置了參數名稱、數據類型和長度的屬性。此代碼還將參數的SourceColumn屬性設置為CompanyName值。此屬性指示與此數據集的CustomersDataTable中的此參數對應的字段。這允許在插入操作期間將數據表中的值自動插入到參數的Value屬性中。讓我們更詳細地討論這壹點。當調用SQLDataAdapter的Update方法時,它將更新數據集中的單個DataTable。逐行檢查數據表,找到需要更新、插入或刪除的行。當發現有新行要插入到數據庫中時,SQLDataAdapter使用由其InsertCommand屬性設置的命令對象。這裏,命令對象訪問MSDNInsertCustomer存儲過程。在運行存儲過程之前,必須從插入的行填充每個參數的Value屬性。用於配置SQLDataAdapter1的代碼將存儲過程的每個參數與DataTable中的相應字段相關聯。這允許新數據表行的數據自動傳輸到存儲過程的參數中。其他存儲過程的參數也可以進行類似的配置。有壹個區別值得註意。其他存儲過程傳入DataTable中數據的初始值,這些初始值用於檢查數據是否在您不知情的情況下發生了更改。換句話說,如果您獲得了壹些數據,但在您嘗試更新它之前,其他人已經更改了它,您將獲得壹個並發異常。通過啟動上面的程序,獲取客戶信息,然後使用工具(比如SQL Enterprise Manager)來更改記錄中的某些內容,就可以看到這種情況的發生。如果您在示例程序中更改相同的記錄並嘗試更新它,您將會得到壹個並發異常。

  • 上一篇:妳知道哪些被哈佛錄取的中國學生?
  • 下一篇:投影儀都用到了哪些技術,都有哪些部分構成的?
  • copyright 2024編程學習大全網