当前位置: 移动技术网 > IT编程>数据库>MSSQL > 将DataTable作为存储过程参数的用法实例详解

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

2017年12月08日  | 移动技术网IT编程  | 我要评论

宋祖英 国母,平度市天气预报,吴春媛

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网