C# Datatable을 매개 변수로 스토리지 프로시저 전송

6844 단어 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 문구로 데이터셋을 C#에 되돌려 데이터 테이블이 올바른지 확인합니다

좋은 웹페이지 즐겨찾기