У меня есть хранимая процедура на сервере oracle, и я пытаюсь запустить ее, однако я не могу понять, что я делаю неправильно. Когда я вызываю его непосредственно с сервера, он работает отлично, однако, когда я пытаюсь сделать это из веб-приложения, он не работает.Вызов Oracle хранимой процедуры из ASP.NET (C#)
Вот хранимая процедура с его параметрами:
my_stored_procedure ('1111' , '01 AUGUST 2011', '22','abc' ,
'abc' , SYSDATE , 'abc' , 1 ,'abc' , NULL, 7, returnValue) ;
Если я бегом это на оракул сервере, то он работает без каких-либо проблем, и делает то, что это предположит. Теперь вот с # код, который я бегу, чтобы попытаться заставить его работать:
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();
ошибка, я получаю: + $exception {"ERROR [42000] [Oracle][ODBC][Ora]ORA-00900: invalid SQL statement\n"} System.Exception {System.Data.Odbc.OdbcException}
Я не могу понять, что я делаю неправильно.
Параметры для процедуры:
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
параметр [11] имеет значение, но является выходным параметром. Должно ли это быть 'ParameterDirection.InputOutput'? – JayGee
Я пробовал это, и он по-прежнему выдавал ту же ошибку, поэтому я попытался удалить значение и просто вызывать вывод, и он все равно дал мне ту же ошибку. – Bojan