[英]Pass table-type object as input parameter to Stored Procedure in Oracle from C#
[英]How to send a table-type in parameter to T-SQL while using C# IDataReader?
我写了一个t-sql sp,它将一个表作为参数。
我试图从c#调用它,但不知道使用什么类型:
database.AddInParameter(command, "@ID", DbType.String, id);
database.AddInParameter(command, "@TemplatesIds", DbType.WhatType??, dt);
using (IDataReader reader = database.ExecuteReader(command))
{
while (reader.Read())
{
}
}
我该怎么用?
SqlDbType.Structured
http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
也许不是最好的方法,但有效:
-- Create the data type
CREATE TYPE dbo.PlantList AS TABLE
(
plant_code char(1) Not Null Primary Key
)
GO
扩展方法
public static class DatabaseExtensions
{
public static void AddTableTypeParameter<T>(this Database database, DbCommand command, string name, string sqlType, IEnumerable<T> values)
{
var table = new DataTable();
PropertyInfo[] members = values.First().GetType().GetProperties();
foreach (var member in members)
{
table.Columns.Add(member.Name, member.PropertyType);
}
foreach (var value in values)
{
var row = table.NewRow();
row.ItemArray = members.Select(m => m.GetValue(value)).ToArray();
table.Rows.Add(row);
}
var parameter = new SqlParameter(name, SqlDbType.Structured)
{
TypeName = sqlType,
SqlValue = table
};
command.Parameters.Add(parameter);
}
}
并呼吁如下:
database.AddTableTypeParameter(command, "@region_filter_plants", "dbo.PlantList", regionFilterPlants.Select(p => new { plant_code = p }));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.