将DataTable作为存储过程参数的用法实例详解_mssql数据库教程-查字典教程网
将DataTable作为存储过程参数的用法实例详解
将DataTable作为存储过程参数的用法实例详解
发布时间:2017-01-07 来源:查字典编辑
摘要:最近工作中写了几个存储过程,需要向存储过程中传递字符串,因为SQLServer2000中没有内置类似于split的函数,只好自己处理,将前台...

最近工作中写了几个存储过程,需要向存储过程中传递字符串,因为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;

}

}

点击【添加】按钮时调用存储过程。测试是完成了

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新mssql数据库学习
    热门mssql数据库学习
    编程开发子分类