• 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();
                }
            }
  • 相关阅读:
    iptables的例子1
    Nginx教程
    bash编程基础
    centos7 PXE自动安装环境搭建
    矛盾破裂了
    20200823-矩阵的收尾与离散控制的跌跌撞撞
    20200817-三大公式的结束-频域法的再探
    markdown换行
    由二〇二〇新冠疫情引发的对于开源、分享这一理念的看法
    Windows简单使用记录
  • 原文地址:https://www.cnblogs.com/xachary/p/3740612.html
Copyright © 2020-2023  润新知