2011-03-21 177 views
2

所以我想从我的C#.NET应用程序中调用Oracle存储过程。我能找到的大多数在线参考都提示“使用System.Data.OracleClient;”,但.Net 3.5无法识别该名称空间,因此我使用的是“Oracle.DataAccess.Client”。使用“Oracle.DataAccess”(带参数)在C#中调用Oracle存储过程

这里是我下面的代码一些转述,与先前安装和测试的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和我上周在此工作,所以我感谢您的理解和相对匆忙用搞清楚了这一点

+0

我希望你使用微软客户端。确保你添加了一个引用System.Data.OracleClient.dll – pilotcam 2011-03-21 14:08:44

+0

为什么@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 – 2011-03-21 14:18:41

回答

6

我想你需要这样的东西

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参数保存在**命令**中,NOT它的连接。 – KeithA45 2011-03-23 14:41:55

+2

@ KeithA45:你介意发布工作代码吗? – Greg 2011-03-23 15:11:13

相关问题