將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
更新時(shí)間:2013年05月23日 18:11:07 作者:
需要向存儲(chǔ)過(guò)程中傳遞字符串,今天看了下SQL Server 2008的新特性,發(fā)現(xiàn)有表變量的使用,及其將DataTable作為參數(shù)的用法,下面與大家分享下
最近工作中寫(xiě)了幾個(gè)存儲(chǔ)過(guò)程,需要向存儲(chǔ)過(guò)程中傳遞字符串,因?yàn)镾QL Server 2000中沒(méi)有內(nèi)置類(lèi)似于 split 的函數(shù),只好自己處理,將前臺(tái)數(shù)據(jù)集中的一列用逗號(hào)拆分存到一個(gè)List<string>中,再轉(zhuǎn)化為字符串傳給存儲(chǔ)過(guò)程,很是麻煩。今天看了下SQL Server 2008的新特性,發(fā)現(xiàn)有表變量的使用,及其將DataTable作為參數(shù)的用法,就嘗試了一下,簡(jiǎn)單談?wù)勑牡谩?
示例代碼下載
一、測(cè)試環(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。
二、測(cè)試概述
測(cè)試項(xiàng)目很簡(jiǎn)單,就是添加新用戶(hù)
三、準(zhǔn)備數(shù)據(jù)
1、建立數(shù)據(jù)庫(kù)、表、類(lèi)型、存儲(chǔ)過(guò)程
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
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
前臺(tái)搭建好表單,后臺(tái)主要是一個(gè)函數(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);
10
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
}
點(diǎn)擊【添加】按鈕時(shí)調(diào)用存儲(chǔ)過(guò)程。測(cè)試是完成了
示例代碼下載
一、測(cè)試環(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。
二、測(cè)試概述
測(cè)試項(xiàng)目很簡(jiǎn)單,就是添加新用戶(hù)

三、準(zhǔn)備數(shù)據(jù)
1、建立數(shù)據(jù)庫(kù)、表、類(lèi)型、存儲(chǔ)過(guò)程
復(fù)制代碼 代碼如下:
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
復(fù)制代碼 代碼如下:
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
前臺(tái)搭建好表單,后臺(tái)主要是一個(gè)函數(shù):
復(fù)制代碼 代碼如下:
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);
10
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
}
catch (Exception ex)
{
throw ex;
}
}
點(diǎn)擊【添加】按鈕時(shí)調(diào)用存儲(chǔ)過(guò)程。測(cè)試是完成了
您可能感興趣的文章:
- 比較2個(gè)datatable內(nèi)容是否相同的方法
- datatable生成excel和excel插入圖片示例詳解
- c#將list類(lèi)型轉(zhuǎn)換成DataTable方法示例
- 多個(gè)jquery.datatable共存,checkbox全選異常的快速解決方法
- DataTables List互相轉(zhuǎn)換的實(shí)現(xiàn)類(lèi)示例
- 使用DataTable.Select 方法時(shí),特殊字符的轉(zhuǎn)義方法分享
- ASP.NET中DataTable與DataSet之間的轉(zhuǎn)換示例
- 多個(gè)datatable共存造成多個(gè)表格的checkbox都被選中
- datatable行轉(zhuǎn)列示例分享
相關(guān)文章
SQL Server 2008打開(kāi)輸入sa密碼提示無(wú)法登陸數(shù)據(jù)庫(kù)的解決方法
與 SQL Server建立連接時(shí)出現(xiàn)與網(wǎng)絡(luò)相關(guān)的或特定于實(shí)例的錯(cuò)誤,這篇文章主要介紹了SQL Server 2008打開(kāi)輸入sa密碼提示無(wú)法登陸數(shù)據(jù)庫(kù)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07SQL server 2008不允許保存更改的完美解決辦法(圖解)
我重裝系統(tǒng)后就安裝了SQL Server2008R2,第一次使用時(shí)在修改表結(jié)構(gòu)的時(shí)候經(jīng)碰到這樣一個(gè)警告【不允許保存更改。您所做的更改要求刪除并重新創(chuàng)建以下表.對(duì)這樣的錯(cuò)誤提示怎么解決呢?下面小編通過(guò)圖文并茂的形式給大家分享解決辦法2017-01-01SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問(wèn)題的設(shè)置方法
不是很理解為什么在2008中會(huì)加入阻止保存要求重新創(chuàng)建表的更改這個(gè)選項(xiàng).癥狀表現(xiàn)為修改表結(jié)構(gòu)的時(shí)候會(huì)"阻止"你.而且我遇到的情況是居然有的時(shí)候阻止你,有的時(shí)候不阻止你,摸不到頭腦.2012-05-05SQL Server 2008 備份數(shù)據(jù)庫(kù)、還原數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了SQL Server 2008 備份數(shù)據(jù)庫(kù)、還原數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下2014-08-08Java打印和打印預(yù)覽機(jī)制實(shí)例代碼
這篇文章主要介紹了Java打印和打印預(yù)覽機(jī)制實(shí)例代碼,有需要的朋友可以參考一下2014-01-01SQL Server2008導(dǎo)出數(shù)據(jù)之Excel詳細(xì)解析
我覺(jué)得數(shù)據(jù)庫(kù)的導(dǎo)入和導(dǎo)出很有用,順便做一下總結(jié),以免將來(lái)有遺忘。需要的朋友可以過(guò)來(lái)參考下2013-08-08