Sql2008中使用DataTable作为存储过程的参数
2010-09-01 12:54
357 查看
最近工作中写了几个存储过 程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分存到一个List中,再转化为字符串传给存储过程,很是麻烦。今天看了下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、建立数据库、表、类型、存储过程
代码
前台搭建好表单,后台主要是一个函数:
代码
点击【添加】按钮时调用存储过程。测试是完成了,也很简单,传递一个DataTable做参数确实很方便吧,能够轻松完成原先需要很多编码的工 作。关于表变量还是有些道道的,如创建时判断其是否存在的语句,删除表变量前需要先删除引用表变量的存储过程等。一般开发我大多会选择用临时表,处理起来 比较方便,表变量可以作为存储过程参数确实是一个独特的优势,希望在SQL Server的未来版本中能够继续增强对表变量和临时表的支持,尤其是早日支持临时表调试。
一、测试环境
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、建立数据库、表、类型、存储过程
代码
1 IF NOT EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Users') AND OBJECTPROPERTY(id, N'IsUserTable') = 1) 2 BEGIN 3 CREATE TABLE dbo.Users 4 ( 5 UserID INT IDENTITY(-1, -1) NOT NULL, 6 UserName VARCHAR(20) NOT NULL, 7 UserPass VARCHAR(20) NOT NULL, 8 Sex BIT NULL, 9 Age SMALLINT NULL, 10 CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID) 11 ) 12 END 13 IF NOT EXISTS(SELECT * FROM sys.table_types WHERE name = 'UserTable' AND is_user_defined = 1) 14 BEGIN 15 CREATE TYPE UserTable AS TABLE 16 ( 17 UserName VARCHAR(20) NOT NULL, 18 UserPass VARCHAR(20) NOT NULL, 19 Sex BIT NULL, 20 Age SMALLINT NULL 21 ) 22 END 23 GO 24 代码 1 IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('sp_InsertSingleUser') AND OBJECTPROPERTY(id, N'IsProcedure') = 1) 2 BEGIN 3 DROP PROCEDURE dbo.sp_InsertSingleUser 4 END 5 GO 6 CREATE PROCEDURE dbo.sp_InsertSingleUser 7 ( 8 @User UserTable READONLY 9 ) 10 AS 11 12 SET XACT_ABORT ON 13 BEGIN TRANSACTION 14 15 INSERT INTO dbo.Users(UserName, UserPass, Sex, Age) 16 SELECT UserName, UserPass, Sex, Age FROM @User 17 18 COMMIT TRANSACTION 19 SET XACT_ABORT OFF 20 GO |
代码
1 public void fnInsertSingleUser(DataTable v_dt) 2 { 3 try 4 { 5 SqlConnection cn = new SqlConnection(CONN); 6 SqlCommand cmd = cn.CreateCommand(); 7 cmd.CommandType = CommandType.StoredProcedure; 8 cmd.CommandText = @"sp_InsertSingleUser"; 9 SqlParameter p = cmd.Parameters.AddWithValue("@User", v_dt); 10 11 DataSet ds = new DataSet(); 12 SqlDataAdapter da = new SqlDataAdapter(cmd); 13 da.Fill(ds); 14 } 15 catch (Exception ex) 16 { 17 throw ex; 18 } 19 } |
相关文章推荐
- Sql2008中使用DataTable作为存储过程的参数【转】
- Sql2008中使用DataTable作为存储过程的参数
- 使用DataTable作为存储过程的参数
- 使用DataTable作为存储过程的参数
- [C#新手入门 三] 使用DataTable作为存储过程的参数
- SQL Server存储过程中使用表值作为输入参数示例
- SQL Server存储过程中使用表值作为输入参数示例
- 存储过程使用逗号分隔作为IN参数疑难问题解决方法【真正解决】
- SQL Server存储过程中使用表值作为输入参数示例
- .net 如何将datatable作为参数传入sql的存储过程
- jsp中使用jdbc驱动与sql2005连接和使用带参数的存储过程
- 带输出参数的存储过程的使用及在C#中调用问题
- mysql 存储过程中表名使用参数传入
- HOW TO:使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程
- sql2005与sql2008存储过程中 变量使用的一处区别
- 表名作存储过程参数 使用sp_executesql动态语句
- 存储过程中使用表值参数(C#)
- 在存储过程A里面调用存储过程B 存储过程B 有返回值 想要将存储过程B的返回值 作为参数传给存储过程A
- 如何使用表名做为参数实现存储过程的设计
- 存储过程中使用函数作为默认参数