【问题标题】:How do I call an Oracle stored procedure from WebMatrix?如何从 WebMatrix 调用 Oracle 存储过程?
【发布时间】:2011-07-26 17:58:17
【问题描述】:

我正在尝试使用 Microsoft WebMatrix 中的 WebMatrix.Data 执行 oracle 存储过程。我可以使用普通的选择语句很好地获取数据......但我无法终生弄清楚如何执行 oracle proc。它不像我知道的 T-SQL 过程那样执行。请帮忙!

我正在尝试取回一个值。我只是想证明我可以使用 webmatrix.data 访问 oracle 存储过程。这是一个查询,所以我不确定 db.Execute 是否有效,因为它是针对非查询的。

代码如下:

 CREATE OR REPLACE PROCEDURE COUNT_JOB_HISTORY
 (
   reccount OUT NUMBER
 )
 IS
   BEGIN
     SELECT COUNT(*) INTO reccount
     FROM JOB_HISTORY;
   END COUNT_JOB_HISTORY;

这是 .Net 代码

    public static dynamic GetJobHistoryCount()
    {
        var db = Database.OpenConnectionString(connectionString, providerName);

        var jobs = db.QueryValue("exec COUNT_JOB_HISTORY(:0)", "count");

        return jobs;
    }

它爆炸为 ORA-00900:无效的 SQL 语句

谢谢!

【问题讨论】:

    标签: .net oracle stored-procedures webmatrix asp.net-webpages


    【解决方案1】:

    你需要使用db.Execute()(见http://msdn.microsoft.com/en-us/library/webmatrix.data.database.execute%28v=vs.99%29.aspx)...

    关于程序本身和处理参数/结果很难说,因为您没有提供足够的信息,例如

    该过程究竟返回了什么?一个值?一排?光标?

    EDIT- OP 显示存储过程后:

    每个存储过程都是“非查询” - WebMatrix 不知道存储过程中发生的任何事情...... 我从未使用过 WebMatrix...所以这只是一个猜测:

    int reccount = 0;
    db.Execute ("COUNT_JOB_HISTORY", reccount);
    


    或者也许

    db.Execute ("COUNT_JOB_HISTORY", ref reccount); 
    

    编辑 2 - 再试一次:

    db.Execute ("BEGIN COUNT_JOB_HISTORY(:0); END;", reccount);
    

    【讨论】:

    • 您好!我编辑了我原来的问题,使其更具体。希望这可以帮助!再次感谢您提供的任何帮助
    • 好的!我们一定会到达那里!多亏了您,它才停止抛出该错误! :-) 现在,由于它是作为动态集合返回的,所以它只输出一次 char。所以不是返回数字 10,而是只返回数字 1。有什么想法吗?再次感谢!
    • 它返回 1 因为 Execute 应该返回“更改的行”的计数而不是任何值...
    • 最后一次尝试——这次是db.Query ("BEGIN COUNT_JOB_HISTORY(:0); END;", reccount);——也许这行得通
    • 不幸的是,它在使用 db.Query 时返回了 0 条记录。我非常感谢您的所有帮助。谢谢
    猜你喜欢
    • 2011-04-25
    • 2015-05-22
    • 2012-01-27
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多