標籤:style blog color io ar strong 資料 sp div
//建立一個靜態方法
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.tempPRgoCREATE TYPE dbo.tempPR AS TABLE(PT_PCURR decimal(15, 2), --這2個欄位必須與傳入的C# datatable中 欄位的先後順序一致MATNR varchar(18)--)goCREATE 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是否正確
C# 將Datatable作為參數,傳入預存程序