Пользовательский эквивалент типа SQL в библиотеке Enterprise - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь передать параметр, который является табличным типом в SQL Server.Я не могу найти совместимый тип c #.

Я передаю несколько параметров хранимой процедуре, и один из параметров - это пользовательский тип в SQL.

Database Connection = new SqlDatabase(ConnectionString);
DbCommand Cmd= Connection.GetStoredProcCommand("ProcedureName");
..................
Connection.AddInParameter(Cmd, "@custom", DbType.Object, custom);

Хранимая процедура выглядит следующим образомthis:

ALTER PROCEDURE [dbo].[ProcedureName]
  @custom dbo.CstmType READONLY 
AS

Этот код выдает следующую ошибку:

Неверный поток протокола RPC для входящего табличного потока данных (TDS).Параметр 6 ("@custom"): тип данных 0x62 (sql_variant) имеет недопустимый тип для метаданных для конкретного типа

Я устал от поиска ответа на этот вопрос в Интернете.Кто-нибудь может дать полезное предложение, как справиться с этой ошибкой и какой должен быть соответствующий тип данных?

1 Ответ

2 голосов
/ 05 июня 2019

В вашем коде C # создайте DataTable с теми же полями, которые вы добавили в определяемый пользователем тип таблицы. Например,

DataTable dt = new DataTable();
dt.Columns.Add("column1");
dt.Columns.Add("column2");

После этого вставить данные в эту таблицу, например,

dt.Rows.Add(new Object[]{ value1,value2 });

Добавить параметр в вызове процедуры, как показано ниже,

SqlCommand cmd = new SqlCommand("ProcedureName", con)
cmd.CommandType = CommandType.StoredProcedure;
var List = new SqlParameter("@custom", SqlDbType.Structured);
List.TypeName = "CstmType";
List.Value = dt;
cmd.Parameters.Add(List);

В вашей хранимой процедуре добавьте параметры для определенного пользователем типа таблицы

@custom dbo.CstmType READONLY
...