ORMLITE 是否支持 Table 变量作为存储过程参数?
Does ORMLITE support Table Variable as stored procedure parameter?
我正在为我的 DAL 使用服务堆栈 ORMLIte,到目前为止它非常适合基本的 CRUDS。但是,我确实有一个特殊情况,我必须调用参数类型为 Table 变量的存储过程。现在,我知道 ADO.NET 通过 c# 调用 DataTable 类型的数据库来支持这一点。但是,我不知道 ORMLite 是否支持它,因为我在文档中没有看到任何示例,如果支持,是否有任何示例?
是的,这是一个示例函数,已更新以与 TVP 一起使用(最初使用 OrmLite T4 模板生成然后我修改),希望这有帮助。我正在传递一个 HashSet 以用于构建 DataTable 以作为 TVP 参数传递:
public static OrmLiteSPStatement CallMyStoredProcTVP(this IDbConnection db, HashSet<int> userids)
{
// need to create a datatable to pass as a parameter to your tvp SP
DataTable dataTableUserIds = new DataTable();
dataTableUserIds.Columns.Add("Value", typeof(Int32));
foreach (int id in userids)
{
DataRow ro = dataTableUserIds.NewRow();
ro[0] = id;
dataTableUserIds.Rows.Add(ro);
}
// create db command
var dbCmd = (DbCommand)OrmLiteConfig.ExecFilter.CreateCommand(db).ToDbCommand();
// set name of SP
dbCmd.CommandText = "MyStoredProcTVP";
dbCmd.CommandType = CommandType.StoredProcedure;
// add new parameter but I leave off the Type
dbCmd.Parameters.Add(CreateNewParameter(dbCmd, "UserIDs", dataTableUserIds, ParameterDirection.Input));
return new OrmLiteSPStatement(db, dbCmd);
}
private static DbParameter CreateNewParameter(DbCommand dbCommand, string paramName, object paramValue, ParameterDirection paramDirection)
{
DbParameter param = dbCommand.CreateParameter();
param.Direction = paramDirection;
param.ParameterName = paramName;
param.Value = paramValue;
return param;
}
我正在为我的 DAL 使用服务堆栈 ORMLIte,到目前为止它非常适合基本的 CRUDS。但是,我确实有一个特殊情况,我必须调用参数类型为 Table 变量的存储过程。现在,我知道 ADO.NET 通过 c# 调用 DataTable 类型的数据库来支持这一点。但是,我不知道 ORMLite 是否支持它,因为我在文档中没有看到任何示例,如果支持,是否有任何示例?
是的,这是一个示例函数,已更新以与 TVP 一起使用(最初使用 OrmLite T4 模板生成然后我修改),希望这有帮助。我正在传递一个 HashSet 以用于构建 DataTable 以作为 TVP 参数传递:
public static OrmLiteSPStatement CallMyStoredProcTVP(this IDbConnection db, HashSet<int> userids)
{
// need to create a datatable to pass as a parameter to your tvp SP
DataTable dataTableUserIds = new DataTable();
dataTableUserIds.Columns.Add("Value", typeof(Int32));
foreach (int id in userids)
{
DataRow ro = dataTableUserIds.NewRow();
ro[0] = id;
dataTableUserIds.Rows.Add(ro);
}
// create db command
var dbCmd = (DbCommand)OrmLiteConfig.ExecFilter.CreateCommand(db).ToDbCommand();
// set name of SP
dbCmd.CommandText = "MyStoredProcTVP";
dbCmd.CommandType = CommandType.StoredProcedure;
// add new parameter but I leave off the Type
dbCmd.Parameters.Add(CreateNewParameter(dbCmd, "UserIDs", dataTableUserIds, ParameterDirection.Input));
return new OrmLiteSPStatement(db, dbCmd);
}
private static DbParameter CreateNewParameter(DbCommand dbCommand, string paramName, object paramValue, ParameterDirection paramDirection)
{
DbParameter param = dbCommand.CreateParameter();
param.Direction = paramDirection;
param.ParameterName = paramName;
param.Value = paramValue;
return param;
}