繁体   English   中英

在c#中创建用户定义的表类型以在sql server存储过程中使用

[英]Create a user defined table type in c# to use in sql server stored procedure

我正在尝试编写一个 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 指南的代码片段:

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# 代码中创建一个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 时使用的名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM