将DataTable作为存储过程参数的用法实例详解

所属分类: 数据库 / mssql2008 阅读数: 153
收藏 0 赞 0 分享
最近工作中写了几个存储过程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分存到一个List<string>中,再转化为字符串传给存储过程,很是麻烦。今天看了下SQL Server 2008的新特性,发现有表变量的使用,及其将DataTable作为参数的用法,就尝试了一下,简单谈谈心得。
示例代码下载

一、测试环境
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。
二、测试概述
测试项目很简单,就是添加新用户
 
三、准备数据
1、建立数据库、表、类型、存储过程
复制代码 代码如下:

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

前台搭建好表单,后台主要是一个函数:
复制代码 代码如下:

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;
}
}

点击【添加】按钮时调用存储过程。测试是完成了
更多精彩内容其他人还在看

SQL Server 2008 数据库中创建只读用户的方法

这篇文章主要介绍了SQL Server 2008 数据库中创建只读用户的方法,为了保护数据库的安全,需要给不同的使用者开通不同的访问用户,那么如何简单的控制用户的权限呢?下面我们就创建一个只读用户,给大家学习使用
收藏 0 赞 0 分享

sql server 2008 用户 NT AUTHORITY\IUSR 登录失败的解决方法

今天在配置asp+sql server 2008的时候,发现总是无法登录数据库,提示sql server 2008 用户 NT AUTHORITY\IUSR 登录失败,原来是因为用户问题,这里简单分享下
收藏 0 赞 0 分享

当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关)

这篇文章主要介绍了当 MUST_CHANGE 为 ON (开)时,不能将 CHECK_POLICY 和 CHECK_EXPIRATION 选项设为 OFF (关) ,需要的朋友可以参考下
收藏 0 赞 0 分享

Microsoft SQL Server 2008 基本安装说明

这篇文章主要介绍了Microsoft SQL Server 2008 基本安装说明 ,需要的朋友可以参考下
收藏 0 赞 0 分享

详解SQLServer 2008 R2数据库SSAS建模及扩展能力

本文主要介绍了SQLServer 2008 R2数据库SSAS建模工具和建模的关键过程以及数据挖掘方面的知识,需要的朋友可以参考下
收藏 0 赞 0 分享

sql2008安装教程 SQL Server 2008 R2 安装图解

这篇文章主要介绍了sql2008安装教程 SQL Server 2008 R2 安装图解,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL Server 2008 密钥 key 使用方法

最新修订版和Visual Studio 2008一样,从官网下载SQL Server 2008的180天试用版其实与正式版内容是基本相同的,唯一的区别就在于安装配置文件中所包含的key。各种版本的SQL Server在进行到这一步之前都是完全一样的
收藏 0 赞 0 分享

sql server 2008 r2 express 精简版与企业版的区别

今天群里发现有网站问sql server 2008 r2 express是什么版本,其实express表示此版本是精简版的,方便学习使用,主要是免费的
收藏 0 赞 0 分享

Win2003系统下SQL Server 2008安装图解教程(详细图解)

这篇文章主要介绍了Win2003系统下SQL Server 2008安装图解教程(详细图解),需要的朋友可以参考下
收藏 0 赞 0 分享

SQL Server 2008 R2 超详细安装图文教程

这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多