关闭

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

3171人阅读 评论(0) 收藏 举报
分类:

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

一、测试环境

1Windows Server 2008 R2 DataCenter

2Visual Studio 2008 Team System With SP1

3SQL 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的未来版本中能够继续增强对表变量和临时表的支持,尤其是早日支持临时表调试:)

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

程序进度条基础篇(WPF、C#、BackgroundWorker、代码说明)

其实进度条主要的思想就是采用多线程操作,让耗时的操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示。在.net中,提供了一个组件BackgroundWorker可...
  • hj2011124071
  • hj2011124071
  • 2016-03-24 16:33
  • 484

存储过程参数为DataTable

开发要求,前台一次性将多笔记录存入数据库中。也就是说,将一个DataTable作为一个参数传入。而数据库的存储过程,也得有一个表数据类型(sql2008) http://www.cnblogs.com...
  • CsethCRM
  • CsethCRM
  • 2013-12-25 12:56
  • 3377

entity framework(EF) 直接执行数据库命令并返回DataTable 参数化sql语句

entity framework(EF) 直接执行数据库命令 //调用方法 private void button1_Click(object sender, EventArgs ...
  • idays021
  • idays021
  • 2016-05-19 19:04
  • 7509

Entity Framework(EF) 直接执行数据库命令并返回 DataTable 数据参数化 SQL 语句

//调用方法         private void button1_Click(object sender, EventArgs e)         {         &#...
  • Denghejing
  • Denghejing
  • 2017-04-19 23:42
  • 1910

将DataTable作为存储过程参数的用法

比较新奇的用法。 最近工作中写了几个存储过程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分...
  • jacky4955
  • jacky4955
  • 2013-05-28 10:55
  • 820

c# 调用带参数的存储过程

  • 2017-03-23 08:05
  • 3KB
  • 下载

C# 执行存储过程,自动产生序列号,反回数据集,反回OUTPUT参数

  • 2010-05-13 20:39
  • 16KB
  • 下载

使用SQLHelper类调用带输出、返回参数的存储过程

  • 2008-07-14 16:11
  • 4KB
  • 下载

c#调用带输出参数的存储过程

我会坚持经常就一些比较典型的问题发表博客,同学们可以长上来看看,有什么问题及时来反映。 第一篇,c#调用带输出参数的存储过程。 1.存储过程的意义 sql语句的执行大致包括,语法和语句分析,...
  • huchunfu
  • huchunfu
  • 2012-11-27 22:09
  • 244

存储过程输出参数、返回值、返回表及C#调用

存储过程中可以定义输出变量,返回值,执行存储过程还能获得结果集。每个存储过程的默认返回值为0。下面紧接着上文 SQL Server中存储过程Stored Procedure创建及C#调用 基础上写的一...
  • tanzhangwen
  • tanzhangwen
  • 2015-02-26 11:27
  • 3367
    个人资料
    • 访问:195861次
    • 积分:2031
    • 等级:
    • 排名:千里之外
    • 原创:65篇
    • 转载:23篇
    • 译文:1篇
    • 评论:122条
    文章分类
    最新评论