打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[C#新手入门 三] 使用DataTable作为存储过程的参数
分类: C# 2014-02-12 11:29 692人阅读 评论(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、建立数据库、表、类型、存储过程

 

  1. <span style="font-size:14px;">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</span>  

 

  1. <span style="font-size:14px;">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</span>  


 

 

 

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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#下SQL Server 2008表类型参数传递 - 51CTO.COM
浅析SQL SERVER一个没有公开的存储过程
sqlserver存储过程集锦(一)
几个功能强大的分析SQL Server数据库结构的存储过程
SQL本地调用不同数据库的数据方法汇总[Access软件网]
《SQLServer数据库应用基础教程》第八章存储过程及其应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服