将多个 tvp 值添加到数据表时出错

我尝试使用表值参数将包含多列的列表添加到 MSSQL 数据库。


我收到此错误:


'无法将 '...Models.OptionValue' 类型的对象转换为类型 'System.IConvertible'。无法将 <...OptionValue> 存储在 OptionID 列中。预期类型是 Int32。InnerException:InvalidCastException:无法将“...Models.OptionValue”类型的对象转换为类型“System.IConvertible”。


SQL Tvp 表:


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 接口,但它不起作用。我怎样才能解决这个问题 ?


尚方宝剑之说
浏览 79回答 1
1回答

Qyouu

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;&nbsp;tvp.Rows.Add(dr);&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP