C# 調用存儲過程傳入表變量作為參數


首先在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();
            }
        }

 


免責聲明!

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



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