简体   繁体   English

将数组传递给存储过程时,对象必须实现IConvertible错误

[英]Object must implement IConvertible error when passing an array to stored procedure

I'm getting this error: 我收到这个错误:

Object must implement IConvertible. 对象必须实现IConvertible。
Line 225: SqlDataReader r = cmd.ExecuteReader(); 第225行:SqlDataReader r = cmd.ExecuteReader();

SQL Server type definition: SQL Server类型定义:

CREATE TYPE [dbo].[IdList] AS TABLE(
    [id] [int] NULL
)
GO

Stored procedure: 存储过程:

ALTER proc [dbo].[GetDictionaryWords2]
    @categories AS dbo.IdList READONLY
AS
select ... 
from ...
where [category] in (select id from @categories)

ASP.Net: ASP.Net:

public static DictionaryWord[] GetDictionaryWords2(int[] categories)
{
                cmd.CommandText = "GetDictionaryWords2";
                var categoriesParams = cmd.Parameters.AddWithValue("@categories", categories);
                categoriesParams.SqlDbType = SqlDbType.Structured;
                categoriesParams.TypeName = "dbo.IdList";
                SqlDataReader r = cmd.ExecuteReader();
}

Any ideas? 有任何想法吗?

You need to pass it as DataTable and not as array. 您需要将其作为DataTable传递而不是作为数组传递。 From your posted code, you can convert the passed array to datatable and use that like 从您发布的代码中,您可以将传递的数组转换为datatable并使用它

public static DictionaryWord[] GetDictionaryWords2(int[] categories)
{
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn("ID");
            dt.Columns.Add(dc);
            categories.ToList().ForEach(dr => { DataRow d = dt.NewRow(); d[dc] = dr; dt.Rows.Add(d); });
                cmd.CommandText = "GetDictionaryWords2";
                var categoriesParams = cmd.Parameters.AddWithValue("@categories", dt);
                categoriesParams.SqlDbType = SqlDbType.Structured;
                categoriesParams.TypeName = "dbo.IdList";
                SqlDataReader r = cmd.ExecuteReader();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误:对象必须实现 IConvertible - Error : Object must implement IConvertible 尝试强制转换动态对象时,对象必须实现 IConvertible 错误 - Object must implement IConvertible error when trying to cast dynamic object 转换动态类型时出错 — Object 必须实现 IConvertible - Error when converting dynamic type — Object must implement IConvertible 对象必须实现IConvertible - Object must implement IConvertible Linq to Excel-对象必须实现IConvertible错误 - Linq to Excel - Object must implement IConvertible error 对象必须实现iconvertible devexpress - object must implement iconvertible devexpress Convert.ChangeType (Error: Object must implement IConvertible) 当 Dynamically Convert object to IList 失败 为什么? - Convert.ChangeType (Error: Object must implement IConvertible) when Dynamically Convert object to IList fails Why? 如何解决c#对象必须实现iconvertible错误? - how to solve c# object must implement iconvertible error? 将 dapper 与 .net 核心一起使用时,对象必须实现 IConvertible 异常 - Object must implement IConvertible Exception, when using dapper with .net core 对象必须在linq查询中实现IConvertible错误才能选择两行 - object must implement IConvertible error in linq query to select two rows
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM