使用odbc将表作为输入参数传递给存储过程

时间:2018-02-09 13:51:10

标签: c# sql-server odbc

我在DB方面有类似的东西:

CREATE TYPE dbo.idstable AS TABLE
(
    Idx bigint NOT NULL PRIMARY KEY
);
GO

CREATE PROCEDURE [usp_GetIds]
    @input idstable READONLY
AS
    SELECT * from @input
go

我想使用odbc从C#代码调用usp_GetIds。

using (var command = new OdbcCommand("usp_GetIds", conn))
{
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddRange(parameters);

    using (var reader = command.ExecuteReader())
    {
     ....
    }
}

现在我坚持这样的事情:

var parameters = new[] { new OdbcParameter("@input", CreateDataTable(ids)) };

private static DataTable CreateDataTable(IEnumerable<int> Ids)
{
    DataTable table = new DataTable();
    table.Columns.Add("Idx", typeof(Int23));
    foreach (int id in Ids)
    {
        table.Rows.Add(id);
    }
    return table;
}

和消息: “从对象类型System.Data.DataTable到已知的托管提供程序本机类型不存在映射。”

有没有办法使用odbc将表作为输入参数传递给存储过程? 或者我必须使用SqlConnection / SqlCommand / SqlParameter?

0 个答案:

没有答案