C# 將Datatable作為參數,傳入存儲過程


//創建一個靜態方法 
public static DataSet fnInsertSingleUser(DataTable v_dt, params string[] param) {
try { SqlConnection cn = new SqlConnection(connectionString);//connertionString鏈接數據庫字符串 SqlCommand cmd = cn.CreateCommand(); cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = @"" + param[0]; SqlParameter p = cmd.Parameters.AddWithValue("@User", v_dt);
          //參數可以隨意增加 SqlParameter pCode
= cmd.Parameters.AddWithValue("@pCode", param[1]); SqlParameter gsdm = cmd.Parameters.AddWithValue("@gsdm", param[2]); SqlParameter khdm = cmd.Parameters.AddWithValue("@khdm", param[3]); SqlParameter qy = cmd.Parameters.AddWithValue("@qy", param[4]); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); return ds; } catch (Exception ex) { throw ex; } }

SQL

IF EXISTS ( SELECT  A = 1
            FROM    sys.objects
            WHERE   name = 'PRCreate '
                    AND type = 'P' ) 
    DROP PROCEDURE dbo.PRCreate
 
go
 
IF EXISTS ( SELECT  A = 1
            FROM    sys.table_types
            WHERE   name = 'tempPR '
                    AND is_user_defined = 1 ) 
    DROP TYPE dbo.tempPR


go

CREATE TYPE dbo.tempPR AS TABLE
(
PT_PCURR  decimal(15, 2), --這2個字段必須與傳入的C# datatable中 字段的先后順序一致
MATNR   varchar(18)--
)


go


CREATE PROCEDURE dbo.PRCreate
    (
      @User AS dbo.tempPR READONLY, --C# datatable參數
      @pCode varchar(50),
      @gsdm varchar(50),
      @khdm varchar(50),
      @qy varchar(50)
    )
AS 
    BEGIN
  SELECT * FROM @User
  END

調用

            DataSet ds = new DataSet();
            ds = SqlHelper.fnInsertSingleUser(dt, "PRCreate", param[0], param[2], param[3], param[4]);//在存儲過程中處理,返回結果集

調用時注意傳入的參數必須與存儲過程中 @User @pCode @gsdm @khdm @qy 的參數一致(見第一段代碼)

 

重點:

1、就是傳入存儲過程的Datatable參數的字段先后順序,必須與在存儲過程中創建的表字段的先后順序一致

2、調試:用一句select語句,返回一個DataSet到C#中看看,傳入datatable是否正確

 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM