小編給大家分享一下怎么使用DataTable作為存儲過程的參數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)主營革吉網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App定制開發(fā),革吉h5小程序制作搭建,革吉網(wǎng)站營銷推廣歡迎革吉等地區(qū)企業(yè)咨詢因為SQL Server 2000中沒有內(nèi)置類似于 split 的函數(shù),只好自己處理,將前臺數(shù)據(jù)集中的一列用逗號拆分存到一個List中,再轉(zhuǎn)化為字符串傳給存儲過程,很是麻煩。下面創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,小編來講解下如何使用DataTable作為存儲過程的參數(shù)?
如何使用DataTable作為存儲過程的參數(shù)
一、測試環(huán)境
1、Windows Server 2008 R2 DataCenter
2、Visual Studio 2008 Team System With SP1
3、SQL Server 2008 Enterprise Edition With SP1
由于是SQL Server 2008新特性,所以只能用2008。
二、測試概述
測試項目很簡單,就是添加新用戶
三、準(zhǔn)備數(shù)據(jù)
1、建立數(shù)據(jù)庫、表、類型、存儲過程
IF NOT EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Users') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) BEGIN CREATE TABLE dbo.Users ( UserID INT IDENTITY(-1, -1) NOT NULL, UserName VARCHAR(20) NOT NULL, UserPass VARCHAR(20) NOT NULL, Sex BIT NULL, Age SMALLINT NULL, CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID) ) END IF NOT EXISTS(SELECT * FROM sys.table_types WHERE name = 'UserTable' AND is_user_defined = 1) BEGIN CREATE TYPE UserTable AS TABLE ( UserName VARCHAR(20) NOT NULL, UserPass VARCHAR(20) NOT NULL, Sex BIT NULL, Age SMALLINT NULL ) END GO
如何使用DataTable作為存儲過程的參數(shù)
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('sp_InsertSingleUser') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) BEGIN DROP PROCEDURE dbo.sp_InsertSingleUser END GO CREATE PROCEDURE dbo.sp_InsertSingleUser ( @User UserTable READONLY ) AS SET XACT_ABORT ON BEGIN TRANSACTION INSERT INTO dbo.Users(UserName, UserPass, Sex, Age) SELECT UserName, UserPass, Sex, Age FROM @User COMMIT TRANSACTION SET XACT_ABORT OFF GO
前臺搭建好表單,后臺主要是一個函數(shù):
public void fnInsertSingleUser(DataTable v_dt) { try { SqlConnection cn = new SqlConnection(CONN); SqlCommand cmd = cn.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = @"sp_InsertSingleUser"; SqlParameter p = cmd.Parameters.AddWithValue("@User", v_dt); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); } catch (Exception ex) { throw ex; } }
點擊【添加】按鈕時調(diào)用存儲過程。測試是完成了,也很簡單,傳遞一個DataTable做參數(shù)確實很方便吧,能夠輕松完成原先需要很多編碼的工作。關(guān)于 表變量還是有些道道的,如創(chuàng)建時判斷其是否存在的語句,刪除表變量前需要先刪除引用表變量的存儲過程等。一般開發(fā)我大多會選擇用臨時表,處理起來比較方 便,表變量可以作為存儲過程參數(shù)確實是一個獨(dú)特的優(yōu)勢,希望在SQL Server的未來版本中能夠繼續(xù)增強(qiáng)對表變量和臨時表的支持,尤其是早日支持臨時表調(diào)試。
以上是“怎么使用DataTable作為存儲過程的參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!