【问题标题】:Calling an Oracle stored procedure in C# using "Oracle.DataAccess" (with a parameter)使用“Oracle.DataAccess”(带参数)在 C# 中调用 Oracle 存储过程
【发布时间】:2011-07-19 17:14:51
【问题描述】:

所以我试图从我的 C# .NET 应用程序中调用 Oracle 存储过程。我能找到的大多数在线参考资料都建议“使用 System.Data.OracleClient;”,但 .Net 3.5 无法识别该命名空间,所以我改用“Oracle.DataAccess.Client”。

下面是我的代码的一些解释,之前设置和测试的 OracleConnection 名为“myConn”,已经填充了参数“:arg_myArg”(如果重要,它是一个数字):

command.Connection = myConn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "exec mySchema.myProc(:arg_myArg)"
command.ExecuteNonQuery();

诀窍在于程序设计不返回任何内容,它只是填充了我从中提取的另一个表。但是,当我尝试运行上面的代码时,我在最后一行得到一个“OracleException”并给出了这个错误:

ORA-06550: line 1, column 13:
PLS-00103: Encountered the symbol "MYSCHEMA" when expecting one of the following:

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

从命令中删除“exec”会导致此错误:

ORA-06550: line 1, column 8:
PLS-00801: internal error [22503]
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored

有什么想法吗?我很乐意澄清任何事情

这是我第一次在 stackoverflow.com 上发帖,也是我在这份工作的最后一周,所以我感谢你的理解和相对匆忙的解决这个问题

【问题讨论】:

  • 我强烈建议您使用 Microsoft 客户端。确保添加对 System.Data.OracleClient.dll 的引用
  • 为什么选择@pilotcam? Microsoft 已贬低 MS Oracle 客户端 (System.Data.OracleClient) 并建议使用 ODP (Oracle.DataAccess.Client)。 blogs.msdn.com/b/adonet/archive/2009/06/15/…

标签: c# .net stored-procedures oracle10g ora-06550


【解决方案1】:

我认为你需要这样的东西

command.Connection = myConn;
command.CommandType = CommandType.StoredProcedure;  
command.CommandText = "mySchema.myProc";  // the proc name   
command.Parameters.Add(/* TODO: Add parameter here */); 
command.ExecuteNonQuery();

【讨论】:

  • 这似乎已经解决了。对于未来的信息寻求者:结果是运行它,我必须不在命令中包含“exec”,不在过程调用中包含参数,并将 oracle 参数保存在 command 中,不是它的连接。
猜你喜欢
  • 2011-10-08
  • 2011-11-24
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多