[英]Calling Oracle Stored Procedure from ASP.NET(C#)
I have a stored procedure on an oracle server and I am trying to run it, however I can't figure out what I am doing wrong. 我在oracle服务器上有一个存储过程,正在尝试运行它,但是我无法弄清楚我在做什么错。 When I call it directly from the server it works fine, however when I try to do it from a web application it does not work.
当我直接从服务器调用它时,它可以正常工作,但是,当我尝试从Web应用程序中调用它时,它却无法正常工作。
Here is the stored procedure with its parameters: 这是存储过程及其参数:
my_stored_procedure ( '1111' , '01 AUGUST 2011', '22','abc' ,
'abc' , SYSDATE , 'abc' , 1 ,'abc' , NULL, 7, returnValue) ;
If I run this on oracle server then it works without any problems and it does what it suppose to. 如果我在oracle服务器上运行此程序,则它可以正常工作,并且可以达到预期的效果。 Now here is the c# code that I am running to try and make it work:
现在,这里是我正在尝试使之工作的C#代码:
OdbcConnection conn = getConnection(); //method that gets the connection
OdbcParameter[] parameter = new OdbcParameter[12];
parameter[0] = new OdbcParameter("@P_1", OdbcType.VarChar);
parameter[0].Value = "0085";
parameter[1] = new OdbcParameter("@P_2", OdbcType.DateTime);
parameter[1].Value = new DateTime(2013, 04, 15);
parameter[2] = new OdbcParameter("@P_3", OdbcType.VarChar);
parameter[2].Value = "72";
parameter[3] = new OdbcParameter("@P_4", OdbcType.VarChar);
parameter[3].Value = "SANDBOX2";
parameter[4] = new OdbcParameter("@P_5", OdbcType.VarChar);
parameter[4].Value = "BATAR";
parameter[5] = new OdbcParameter("@P_6", OdbcType.DateTime);
parameter[5].Value = new DateTime();
parameter[6] = new OdbcParameter("@P_7", OdbcType.VarChar);
parameter[6].Value = "MRD";
parameter[7] = new OdbcParameter("@P_8", OdbcType.Double);
parameter[7].Value = 1;
parameter[8] = new OdbcParameter("@P_9", OdbcType.VarChar);
parameter[8].Value = "ORG70000";
parameter[9] = new OdbcParameter("@P_10", OdbcType.VarChar);
parameter[9].Value = System.DBNull.Value;
parameter[10] = new OdbcParameter("@P_11", OdbcType.Double);
parameter[10].Value = 1;
parameter[11] = new OdbcParameter("@P_12", OdbcType.Int);
parameter[11].Value = 1;
parameter[11].Direction = ParameterDirection.Output;
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(parameter);
cmd.CommandText = "my_stored_procedure ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ;";
cmd.ExecuteNonQuery();
foreach (OdbcParameter p in parameter)
{
if (p.Direction == ParameterDirection.Output)
returnParameter = p.Value.ToString();
}
cmd.Connection.Close();
cmd.Dispose();
Error that I get is: + $exception {"ERROR [42000] [Oracle][ODBC][Ora]ORA-00900: invalid SQL statement\\n"} System.Exception {System.Data.Odbc.OdbcException}
我得到的错误是:
+ $exception {"ERROR [42000] [Oracle][ODBC][Ora]ORA-00900: invalid SQL statement\\n"} System.Exception {System.Data.Odbc.OdbcException}
I can't figure out what i am doing wrong. 我不知道我在做什么错。
Parameters for the procedure: 该过程的参数:
var1 VARCHAR2, var1 DATE, var3 VARCHAR2,
var4 VARCHAR2, var5 VARCHAR2, var6 DATE, var7 VARCHAR2, var8 NUMBER,
var9 VARCHAR2, var10 VARCHAR2 DEFAULT NULL, var11 NUMBER, var12 OUT NUMBER
Have you tried: 你有没有尝试过:
cmd.CommandText = "CALL my_stored_procedure";
or 要么
cmd.CommandText = "CALL my_stored_procedure (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
ODBC command requires CALL ODBC命令需要CALL
CommandText应该仅包含StoredProcedure的名称
cmd.CommandText = "my_stored_procedure";
This is the procedure definition in oracle: 这是oracle中的过程定义:
string connStr = "Data Source=datasource;Persist Security Info=True;User ID=user;Password=pass;Unicode=True"; string connStr =“数据源=数据源;持久安全信息=真实;用户ID =用户;密码=通过; Unicode =真实”; DataSet dataset = new DataSet();
DataSet数据集= new DataSet();
string connStr = ConfigurationManager.ConnectionStrings["OracleConn"].ToString(); 字符串connStr = ConfigurationManager.ConnectionStrings [“ OracleConn”]。ToString();
using (OracleConnection objConn = new OracleConnection(connStr))
{
OracleCommand objCmd = new OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "Oracle_PkrName.Stored_Proc_Name";
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.Parameters.Add("Emp_id", OracleType.Int32).Value = 3; // Input id
objCmd.Parameters.Add("Emp_out", OracleType.Cursor).Direction = ParameterDirection.Output;
try
{
objConn.Open();
objCmd.ExecuteNonQuery();
OracleDataAdapter da = new OracleDataAdapter(objCmd);
da.Fill(dataset);
}
catch (Exception ex)
{
System.Console.WriteLine("Exception: {0}", ex.ToString());
}
objConn.Close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.