簡體   English   中英

將數組傳遞給存儲過程時,對象必須實現IConvertible錯誤

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM