日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用DataTable作为存储过程的参数

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用DataTable作为存储过程的参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 最近工作中寫了幾個存儲過程,需要向存 儲過程中傳遞字符串,因為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、建立數據庫、表、類型、存儲過程

  代碼

   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?}

   點擊【添加】按鈕時調用存儲過程。測試是完成了,也很簡單,傳遞一個DataTable做參數確實很方便吧,能夠輕松完成原先需要很多編碼的工作。關于 表變量還是有些道道的,如創建時判斷其是否存在的語句,刪除表變量前需要先刪除引用表變量的存儲過程等。一般開發我大多會選擇用臨時表,處理起來比較方 便,表變量可以作為存儲過程參數確實是一個獨特的優勢,希望在SQL Server的未來版本中能夠繼續增強對表變量和臨時表的支持,尤其是早日支持臨時表調試。

使用DataTable作為存 儲過程的參數 原文出 處:http://www.cnblogs.com/brooks-dotnet/archive/2010/01/24/1655419.html

轉載于:https://www.cnblogs.com/zhangchenliang/archive/2010/01/29/1659533.html

總結

以上是生活随笔為你收集整理的使用DataTable作为存储过程的参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。