[英]Object must implement IConvertible error when passing an array to stored procedure
我收到這個錯誤:
對象必須實現IConvertible。
第225行:SqlDataReader r = cmd.ExecuteReader();
SQL Server類型定義:
CREATE TYPE [dbo].[IdList] AS TABLE(
[id] [int] NULL
)
GO
存儲過程:
ALTER proc [dbo].[GetDictionaryWords2]
@categories AS dbo.IdList READONLY
AS
select ...
from ...
where [category] in (select id from @categories)
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();
}
有任何想法嗎?
您需要將其作為DataTable
傳遞而不是作為數組傳遞。 從您發布的代碼中,您可以將傳遞的數組轉換為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.