【问题标题】:Create a user defined table type in c# to use in sql server stored procedure在 c# 中创建用户定义的表类型以在 sql server 存储过程中使用
【发布时间】:2014-09-16 14:02:32
【问题描述】:

我正在尝试编写一个 C# 程序来创建整个表以发送回 SQL Server 存储过程。

我看到了 msdn 指南,但非常困惑: http://msdn.microsoft.com/en-us/library/cc879253.aspx

我尝试使用 msdn 指南,但尽管按照编译器的建议添加了对 microsoft.sqlserver.smo、microsoft.sqlserver.connectioninfo、microsoft.sqlserver.management.sdk.sfc 的引用,但仍出现错误。错误是:

为 userdefinedtabletype 设置父级失败。

基于msdn指南的代码sn-p:

Server srv = new Server();
Database db = srv.Databases["MyDatabase"];

//fails at this line
UserDefinedTableType udtt = new UserDefinedTableType(db, "TestTable");
udtt.Columns.Add(new Column(udtt, "Col1", DataType.Int));
udtt.Create();

我只是希望能够构建一个用户定义的数据表,我在这里发现的唯一相关问题只涉及在 SQL 中创建一个用户定义的表,而不是 C#。

我的 SQL Server 连接代码是这样的:

 DataSet ds = new DataSet("SQLDatabase");

       using (SqlConnection conn = new SqlConnection(Settings.Default.SQLConnectionString))
       {
           SqlCommand sqlComm = new SqlCommand("StoredProcedure", conn);

           sqlComm.Parameters.AddWithValue("@param", paramValue);

           sqlComm.CommandType = CommandType.StoredProcedure;

           SqlDataAdapter da = new SqlDataAdapter();
           da.SelectCommand = sqlComm;
           da.Fill(ds);
       }

请有人用简单的语言告诉我,如何在我的 C# 程序中创建用户定义的表类型?

【问题讨论】:

    标签: c# sql-server-2012


    【解决方案1】:

    最简单的选择是在 C# 代码中创建一个 DataTable 并将其作为参数传递给您的过程。假设您已经创建了一个用户定义的表类型为:

    CREATE TYPE [dbo].[userdefinedtabletype] AS TABLE(
        [ID] [varchar](255) NULL,
        [Name] [varchar](255) NULL
    )
    

    然后在你的 C# 代码中你会这样做:

    DataTable dt = new DataTable();
    dt.Columns.Add("ID", typeof (string));
    dt.Columns.Add("Name", typeof (string));
    //populate your Datatable
    
    SqlParameter param = new SqlParameter("@userdefinedtabletypeparameter", SqlDbType.Structured)
    {
        TypeName = "dbo.userdefinedtabletype",
        Value = dt
    };
    sqlComm.Parameters.Add(param);
    

    请记住将SqlDbType.Structured 指定为参数类型,并指定您在创建UDT 时使用的名称。

    【讨论】:

    • 是的,我没有意识到我需要先在 SQL Server 数据库中创建用户定义的表类型。这帮助很大!
    【解决方案2】:

    我在使用用户定义表类型时遇到的问题是,作为结构化类型传递的表定义需要与用户定义类型中的字段名称序列相同。因此,需要一个过程来根据数据库用户定义的表类型在应用程序中创建表以完全匹配并避免事故,今天我浪费了 4 个小时来了解我的存储过程发生了什么问题。唯一的错误是交换了第一个两个字段序列。 请指导是否有人可以帮助如何最好地处理这个问题

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2019-09-24
      • 2017-04-02
      相关资源
      最近更新 更多