[C#新手入门 三] 使用DataTable作为存储过程的参数

http://www.cnblogs.com/zhangchenliang/archive/2011/05/19/2050752.html

一、测试环境

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


 

 

 

前台搭建好表单,后台主要是一个函数:

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     }

 

  点击【添加】按钮时调用存储过程。测试是完成了,也很简单,传递一个DataTable做参数确实很方便吧,能够轻松完成原先需要很多编码的工 作。关于表变量还是有些道道的,如创建时判断其是否存在的语句,删除表变量前需要先删除引用表变量的存储过程等。一般开发我大多会选择用临时表,处理起来 比较方便,表变量可以作为存储过程参数确实是一个独特的优势,希望在SQL  Server的未来版本中能够继续增强对表变量和临时表的支持,尤其是早日支持临时表调试:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值