共計 2189 個字符,預(yù)計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下怎么使用 DataTable 作為存儲過程的參數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
因為 SQL Server 2000 中沒有內(nèi)置類似于 split 的函數(shù),只好自己處理,將前臺數(shù)據(jù)集中的一列用逗號拆分存到一個 List 中,再轉(zhuǎn)化為字符串傳給存儲過程,很是麻煩。下面丸趣 TV 丸趣 TV 小編來講解下如何使用 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)
)
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ù)確實是一個獨特的優(yōu)勢,希望在 SQL Server 的未來版本中能夠繼續(xù)增強對表變量和臨時表的支持,尤其是早日支持臨時表調(diào)試。
以上是“怎么使用 DataTable 作為存儲過程的參數(shù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!
向 AI 問一下細(xì)節(jié)