【问题标题】:Executing stored procedure with ODB ORM使用 ODB ORM 执行存储过程
【发布时间】:2014-06-30 13:40:39
【问题描述】:

Microsoft SQL Server 上存储了一个过程。过程可以返回一个值。 如何使用 ODB ORM 从 MS SQL Server 数据库执行存储过程并获取此过程返回的值?

【问题讨论】:

    标签: c++ sql-server stored-procedures orm odb


    【解决方案1】:

    您可以为此使用本机视图。有关详细信息,请参阅 ODB 手册中的第 10 章“视图”。

    【讨论】:

    • 主要问题是如果该语句不以“FROM”、“WHERE”等开头,ODB 会将“WHERE”语句添加到本机 SQL 查询字符串中。例如 ODB 转换查询“EXEC MyStoreProcedure param1 , param2" 到 "WHERE EXEC MyStoreProcedure param1, param2")。我修改了 libodb-mssql-2.3.0 库。我在文件 query.cxx 中添加了条件s.compare (0, (n = 4), "EXEC") == 0 ||s.compare (0, (n = 4), "exec") == 0) 函数 check_prefix。有没有不修改ODB库源码就可以调用存储过程的解决方案?
    【解决方案2】:

    调用存储过程的正确解决方案如下

    #pragma db view query("exec MyStoredProc (?);")
    struct StoredProc
    {
        int Result;
        std::string Comment;
    };
    
    
    .
    .
    .
    
    
    typedef odb::result<StoredProc> Result;
    typedef odb::query<StoredProc>  Query;
    
    .
    .
    .
    
    Result r( db.query<StoredProc>( Query::_val(param1) + ", "
            + Query::_val(param2) ) ) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 2012-04-16
      • 2018-07-03
      • 2013-07-26
      • 2023-03-23
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多