我在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?