使用"Oracle.DataAccess"在C#中调用Oracle存储过程(带参数)

3
我正在尝试从我的C# .NET应用程序中调用Oracle存储过程。大多数在线参考资料都建议使用"using 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上发布问题,也是我在这份工作的最后一周,所以感谢您的理解和相对迅速地解决问题。


我建议您使用微软客户端。请确保添加对System.Data.OracleClient.dll的引用。 - pilotcam
为什么要使用 @pilotcam?微软已经弃用了 MS Oracle 客户端(System.Data.OracleClient),并建议使用 ODP(Oracle.DataAccess.Client)。http://blogs.msdn.com/b/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx - Mike Ohlsen
1个回答

7
我认为你需要做类似于这样的事情。
command.Connection = myConn;
command.CommandType = CommandType.StoredProcedure;  
command.CommandText = "mySchema.myProc";  // the proc name   
command.Parameters.Add(/* TODO: Add parameter here */); 
command.ExecuteNonQuery();

2
似乎已经解决了。对于未来的信息查找者: 事实证明,为了运行它,我必须在命令中不包括“exec”,在过程调用中不包括参数,并将Oracle参数保存在命令中而不是连接中。 - KeithA45

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接