gpt4 book ai didi

c# - ORMLITE 是否支持表变量作为存储过程参数?

转载 作者:行者123 更新时间:2023-11-30 21:59:26 25 4
gpt4 key购买 nike

我正在为我的 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;
}

关于c# - ORMLITE 是否支持表变量作为存储过程参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29267470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com