У меня есть запрос, написанный как строка на C#, которую я пытаюсь вызвать в базе данных T-sql (а не в хранимой процедуре). Одним из параметров, которые мне нужно передать, является список GUID. Я пытаюсь использовать для этого table-valued parameter. Учитывая, что для части запроса требуются динамические имена таблиц, хранимая процедура считается несколько неуклюжей для отладки. Заключительная часть запроса присоединяется идентификатор на столе в список Guids Я проходящий в.Тип таблицы T-SQL, указанный тип не зарегистрирован
Добавление параметра к моей команде в
var ListOfIDs = new DataTable();
ListOfIDs.Columns.Add("ID", typeof (Guid));
selectedIDs.ForEach(x=> ListOfIDs.Rows.Add(x));
cmd.Parameters.Add(new SqlParameter("@ListOfIDs", SqlDbType.Udt)
{
Value = ListOfIDs, UdtTypeName = "ListOfGuids"
});
Моего столом
CREATE TYPE [dbo].[ListOfGuids] AS TABLE(
[ID] [uniqueidentifier] NULL
)
Когда я запускаю линию:
var reader = cmd.ExecuteReader();
Я получаю ошибку:
Specified type is not registered on the target server.System.Data.DataTable, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
Я не смог найти то, что мне нужно для того, чтобы это работало.
Если это так, как определить, какой тип DB я использую? Я все еще использую имя UdtTypeName? – DocSmiley
@DocSmiley вам не нужно определять это в коде C# - это должно быть определено во входном параметре хранимой процедуры. –
Я специально не использую хранимую процедуру. У меня есть встроенная строка в C#, которая передается как текст команды. – DocSmiley