我正在尝试从Visual Studio 2008运行SQL存储过程,该过程采用表值UDT参数作为输入。我在Visual Studio 2008中添加了此参数,但是当我运行此程序时,它会收到“ArgumentException - 指定的类型未在目标服务器上注册”。
所以我搜索了这个问题并认为我需要在Visual Studio 2008中创建一个与SQL Server 2008中此表类型的属性相匹配的新类。但是我在Internet上找不到涉及 table 的任何示例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”等。
答案 0 :(得分:2)
基本上,你的设置几乎正确 - 中途: - )
查看TVP的那些介绍性文章 - 表值参数 - 这是我试图使用的 GUESS ,对吗?
基本上你需要做的是:
这有帮助吗?我强烈推荐SQL团队的文章 - 非常有用!
马克