Я пробовал все, что я могу найти в Интернете, чтобы заставить это работать.ODP.NET Параметрированный запрос не работает
Я использую VS2013, C#, Oracle.ManagedDataAccess v4 (проверено oracle.dataaccess.client v14), oracle 11g.
Я понимаю, следующий код должен работать (я знаю, что удаление соединений, usings и т.д. не хватаю, но я просто раздел его обратно)
public CustDetailsModel SelectCustDetails(string CustCode)
{
string sql;
OracleDataReader reader;
OracleConnection OraConn = OraConnection.GetConnection;
OraConn.Open();
sql = "SELECT CUSTOMER, NAME, POSTCODE FROM CUSTOMER WHERE CUSTOMER = :CUSTCODE";
OracleCommand cmd = new OracleCommand(sql, OraConn);
OracleParameter parameter = cmd.CreateParameter();
parameter.ParameterName = "CUSTCODE";
parameter.OracleDbType = OracleDbType.Varchar2;
parameter.Value = CustCode;
cmd.Parameters.Add(parameter);
reader = cmd.ExecuteReader();
reader.Read();
return new CustDetailsModel
{
Cust = reader.GetString(reader.GetOrdinal("CUSTOMER")),
CustName = reader.GetString(reader.GetOrdinal("NAME")),
CustPostCode = reader.GetString(reader.GetOrdinal("POSTCODE")),
};
}
если заменить параметр с закодированным значением, это работает!
Он не работает с «Недопустимая операция против закрытого объекта», потому что запрос не возвращал строк.
Помогло ли кто-нибудь помочь?
Спасибо за чтение.
Вы проверили это http://stackoverflow.com/questions/17062954/error-with-oracledatareader-error-invalid-operation-the-connection-is-closed? –
@SergeyMalyutin - нет проблем с подключением к базе данных до ввода параметра. Мне интересно, есть ли у меня правильная версия ODAC для 11gR2. – radiator