在 Dapper 中调用 Oracle 存储过程

Calling an Oracle stored procedure in Dapper

我有一个应用程序通过传递一个字符串和字符串中的参数来调用 Oracle 存储过程,即

string Query = "CALL MySP(" + Variable1 + ", " + Variable2 + ")";

这有效,或者至少我上次尝试时有效。

我需要使用 DynamicParameters 重写查询。

但是,当我执行 Execute(Query, Parms, commandType: CommandType.StoredProcedure) 时,出现错误。

这是我尝试过的一个例子:

using(OracleConnection conn = new OracleConnection(myConnectionString)
{
    string Query = "CALL MySP(:Var1, :Var2)";
    DynamicParameters parms = new DynamicParameters();

    parms.Add("Var1", Variable1, DbType.String, ParameterDirection.Input);
    parms.Add("Var2", Variable2, DbType.String, ParameterDirection.Input);

    var results = connection.Execute(Query, parms, commandType: CommandType.StoredProcedure);
}

当我用上面的查询 运行 时,我得到这个错误:

ORA-06550: line 1, column 12:

PLS-00103: Encountered the symbol "MySP" when expecting one of the following:

:= . ( @ % ;
The symbol ":=" was substituted for "MySP" to continue.

如果我删除 CALL 语句:

Query = "MySP(:Var1, :Var2); 

然后我收到此错误消息:

ORA-01008: not all variables bound

谁能看出我做错了什么?

问题是我一直关注等式的 C# 和 Dapper 方面。我们的 Oracle DBA 设置了存储过程的权限,它 运行.

但是我无法告诉 Dapper CommandType 是存储过程,我调用存储过程的字符串必须如下所示:

string Query = "CALL MySP(:Var1, :Var2)";

如果我删除“CALL”,我会收到错误消息。如果我将“commandType:CommandType.StoredProcedure”添加到 Dapper Execute 函数,我会遇到绑定错误。

我们的 DBA 说他将进一步研究它,看看他能找到什么,以便我们可以使用 Execute 函数中的 CommandType.StoreProcedure 参数调用存储过程。