Ошибка при добавлении нескольких значений tvp в datatable - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь добавить список с несколькими столбцами в базу данных MSSQL, используя табличные параметры.

Я получаю эту ошибку:

'Невозможно привести объект типа' ... Models.OptionValue 'к типу 'System.IConvertible'. Не удалось сохранить <... OptionValue> в OptionID Колонна. Ожидаемый тип: Int32. InnerException: InvalidCastException: невозможно привести объект типа '... Models.OptionValue' для ввода 'System.IConvertible'.

Sql Tvp table:

CREATE TYPE [dbo].[OptionValueList] AS TABLE(
    [OptionID] [int] NULL,
    [ValueID] [int] NULL
)

классы:

public class OptionValue 
{
        public int OptionID { get; set; }
        public int ValueID { get; set; }
}

 public class OptionListVM
 {
        public int ProductID { get; set; }
        public List<OptionValue> OptionValueLst { get; set; }
 }

здесь я пытаюсь добавить столбцы, чтобы передать список хранимой процедуре:

    DataTable tvp = new DataTable();
    tvp.Columns.Add(new DataColumn("OptionID", typeof(int)));
    tvp.Columns.Add(new DataColumn("ValueID", typeof(int)));

    foreach (var x in o.OptionValueLst)               
        tvp.Rows.Add(x); -- error line

Я реализовал интерфейс IConvertable, но он не работает. Как я могу это исправить?

1 Ответ

0 голосов
/ 31 марта 2019
DataTable tvp = new DataTable();
tvp.Columns.Add(new DataColumn("OptionID", typeof(int)));
tvp.Columns.Add(new DataColumn("ValueID", typeof(int)));

foreach (<OptionValue>x in o.OptionValueLst) {
DataRow dr = tvp.NewRow();
dr("OptionID") = x.OptionID;
dr("ValueID") = x.ValueID; 
tvp.Rows.Add(dr); 
}
...