我正在尝试从 Visual Studio 2008 运行 SQL 存储过程,该过程将表值 UDT 参数作为输入。我在 Visual Studio 2008 中添加了这个参数,但是当我运行这个程序时,它得到一个“ArgumentException - 指定类型未在目标服务器上注册”。所以我用谷歌搜索了这个问题,并认为我需要在 Visual Studio 2008 中创建一个新类,以匹配 SQL Server 2008 中此表类型的属性。但我在 Internet 上找不到任何涉及表UDT 的示例。我尝试了所有标量 UDT 示例,但我不确定如何修改它们以使其基于表。
我还阅读了我可能需要创建一个程序集,尽管我不知道这是否仅用于将类型导入 SQL Server 2008 或者它是否也可用于将类型导入 Visual Studio。顺便说一句,我没有看到 VS 2008 中的服务器资源管理器列出的任何类型,尽管我确实看到了数据库及其 SP。我尝试刷新数据库,但类型仍然没有显示。我需要做的很简单。我有一个像这样的表UDT:
CREATE TYPE [dbo].[parseInputFile] AS TABLE(
[NumCols] [int] IDENTITY(1,1) NOT NULL,
[strRow] [varchar](500) NOT NULL,
PRIMARY KEY CLUSTERED
我的 C# 代码中的代码片段是:
public static int AppendData(string[] myStringArray)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "dbo.uspAppendTableFromInput";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
SqlParameter param = cmd.Parameters.Add("@InputFileParam", SqlDbType.Udt);
param.UdtTypeName = "AdventureWorks.dbo.parseInputFile";
param.Value = myStringArray;
conn.Open();
RowsAffected = cmd.ExecuteNonQuery();
RowsAffected 显示运行此命令后受影响的零行。我错过了什么?你能把我指向一个展示这个简单例子的网站吗?还是给我小费?我也试过'param.UdtTypeName="parseInputFile";' 对于上面的代码段,但这返回了相同的错误。顺便说一句,“myStringArray”本质上是一个表。它是一系列字符串。例如 myStringArray[0] = "Hello|Bob|How|Do", myStringArray[1] = "I|Am|Fine|And" 等等。