[英]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.