zoukankan      html  css  js  c++  java
  • 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();
                }
            }
  • 相关阅读:
    SDN第一次上机作业
    期末作业验收
    SDN第5次上机作业
    个人作业——软件工程实践总结作业
    SDN第4次上机作业
    SDN第四次作业
    SDN第三次上机作业
    SDN第三次作业
    SDN第二次上机作业
    SDN第二次作业
  • 原文地址:https://www.cnblogs.com/xachary/p/3740612.html
Copyright © 2011-2022 走看看