Я пытаюсь запустить хранимую процедуру SQL из Visual Studio 2008, которая принимает табличный параметр UDT в качестве входных данных. Я добавил этот параметр в Visual Studio 2008, но когда я запускаю эту программу, она получает «ArgumentException — указанный тип не зарегистрирован на целевом сервере». Поэтому я погуглил эту проблему и подумал, что мне нужно создать новый класс в Visual Studio 2008, соответствующий свойствам этого типа таблицы из SQL Server 2008. Но я не могу найти в Интернете никаких примеров с использованием table УДТ. И я перепробовал все примеры скалярных 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
И фрагмент кода из моего кода С#:
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] = "Привет|Боб|Как делаешь", myStringArray[1] = "Я|Все в порядке|И" и т. д.