Я обращаюсь к базе данных Oracle из приложения .NET.Структура моего кода выглядит следующим образом:
using (OracleConnection conn = new OracleConnection(Oradb))
{
conn.Open();
string sql = "SELECT RI_DESCRIPTION
FROM RI_RISK
WHERE RI_CODE = 'GAIL'";
OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
var result = dr.GetString(0);
Assert.AreEqual("Golden Arches Insurance", result);
}
Теперь я не могу заставить этот оператор что-либо возвращать - assert fails, result = "";
Но я могу получить этот операторчтобы вернуть ожидаемое:
string sql = "SELECT CLI_ABBRNAME
FROM CLI_CLIENT
WHERE CLI_CLIENTNUMBER = 00404";
Я несколько раз проверял правильность имен таблиц и столбцов.Единственное отличие, которое я вижу, это типы данных:
- RI_DESCRIPTION - это LONG
- RI_CODE - это VARCHAR2
- CLI_CLIENTNUMBER - это VARCHAR2
- CLI_ABBRN2 - это VI
Следовательно, есть ли что-то, что я должен делать с LONG, которого я не делаю в коде?
Кроме того, CLI_CLIENTNUMBER действительно VARCHAR2, почему бы мне неМне нужны одиночные апострофы около 00404 в выражении, тогда как для RI_CODE, который является VARCHAR2, мне (очевидно) нужны апострофы вокруг 'GAIL' (в противном случае я получаю исключение Invalid Identifier?
** EDIT
Оператор отлично работает на SQL Plus
** РЕДАКТИРОВАТЬ - РЕШЕНИЕ
Хитрость, следуя ссылке в ответе, состояла в том, чтобы установить для объекта OracleCommand InitialLONGGetchSize значение -1.