小编给大家分享一下怎么使用DataTable作为存储过程的参数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
因为sql Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分存到一个List中,再转化为字符串传给存储过程,很是麻烦。下面编程之家小编来讲解下如何使用DataTable作为存储过程的参数?
如何使用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
如何使用DataTable作为存储过程的参数
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); DataSet ds = new DataSet(); sqlDataAdapter da = new sqlDataAdapter(cmd); da.Fill(ds); } catch (Exception ex) { throw ex; } }
点击【添加】按钮时调用存储过程。测试是完成了,也很简单,传递一个DataTable做参数确实很方便吧,能够轻松完成原先需要很多编码的工作。关于 表变量还是有些道道的,如创建时判断其是否存在的语句,删除表变量前需要先删除引用表变量的存储过程等。一般开发我大多会选择用临时表,处理起来比较方 便,表变量可以作为存储过程参数确实是一个独特的优势,希望在sql Server的未来版本中能够继续增强对表变量和临时表的支持,尤其是早日支持临时表调试。
以上是“怎么使用DataTable作为存储过程的参数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程之家行业资讯频道!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。