首先在SQLServer定義一個自定義表類型:
USE [ABC] GO CREATE TYPE [ABC].[MyCustomType] AS TABLE( [EmployeeId] [char](6) NOT NULL, [LastName] [varchar](30) NULL, [FirstName] [varchar](30) NULL --省略很多列 ) GO
程序部分:
static void Test() { //定義與表類型結構相同的DataTable DataTable dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn() { ColumnName = "EmployeeId", DataType = System.Type.GetType("System.String") }); dataTable.Columns.Add(new DataColumn() { ColumnName = "LastName", DataType = System.Type.GetType("System.String") }); dataTable.Columns.Add(new DataColumn() { ColumnName = "FirstName", DataType = System.Type.GetType("System.String") }); //...此處省略很多行 //插入數據行, 請注意不同類型的賦值, 這里應該根據實際情況添加很多行 DataRow dataRow = dataTable.NewRow(); dataRow["EmployeeId"] = "000001"; dataRow["LastName"] = "Nick"; dataRow["FirstName"] = "Yang"; //此處省略插入很多行 dataTable.Rows.Add(dataRow); string connStr = "Data Source=.;Database=ABC;user id=sa;password=***;Persist Security Info=True"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); try { using (SqlCommand cmd = new SqlCommand(@"MCU.存儲過程名", conn)) { cmd.CommandType = CommandType.StoredProcedure; //關鍵是類型 SqlParameter parameter = new SqlParameter("@import", SqlDbType.Structured); //必須指定表類型名 parameter.TypeName = "ABC.MyCustomType"; //賦值 parameter.Value = dataTable; cmd.Parameters.Add(parameter); cmd.ExecuteNonQuery(); } } catch (Exception ex) { throw new SystemException("Failed to insert result route.", ex); } finally { conn.Close(); } }