【问题标题】:Does ORMLITE support Table Variable as stored procedure parameter?ORMLITE 是否支持表变量作为存储过程参数?
【发布时间】:2017-01-01 13:19:36
【问题描述】:

我正在为我的 DAL 使用服务堆栈 ORMLIte,到目前为止,它对于基本的 CRUDS 非常有用。但是,我确实有一种特殊情况,我必须使用表变量的参数类型调用存储过程。现在,我知道 ADO.NET 通过 c# 使用 DataTable 类型调用数据库来支持这一点。但是,我不知道 ORMLite 是否支持它,因为我在文档中没有看到任何示例,如果支持,是否有任何示例?

【问题讨论】:

  • 如果给出的答案是可行的,你可以标记它接受吗?

标签: c# servicestack ormlite-servicestack


【解决方案1】:

是的,这是一个示例函数,更新后可与 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;
    }

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多