Проблема с использованием sqldatareader с sybase ase
-
25-09-2019 - |
Вопрос
Мы разрабатываем приложение отчетности, которое использует ASP.NET-MVC (.NET 4). Мы подключаемся через промежуточное программное обеспечение DDTEK.Sybase к базе данных Sybase ASE 12.5.
У нас есть проблема, вытягивая данные в DataReader (из хранимой процедуры). Сохраненная процедура вычисляет значения (приблизительно 50 столбцов), делая суммы, количество и вызов других хранимых процедур.
Проблема, которую мы испытываем, это ... Некоторые (возможно, 5% столбцов) возвращаются с NULL или 0. Если мы отладки и скопируем оператор SQL, используемого для DataReader, и запустить его внутри другого инструмента SQL, мы получаем все действительные Значения для всех столбцов.
conn = new SybaseConnection
{
ConnectionString = ConfigurationManager.ConnectionStrings[ConnectStringName].ToString()
};
conn.Open();
cmd = new SybaseCommand
{
CommandTimeout = cmdTimeout,
Connection = conn,
CommandText = mainSql
};
reader = cmd.ExecuteReader();
// AT THIS POINT IMMEDIATELY AFTER THE EXECUTEREADER COMMAND
// THE READER CONTAINS THE BAD (NULL OR 0) DATA FOR THESE COLUMNS.
DataTable schemaTable = reader.GetSchemaTable();
// AT THIS POINT WE CAN VIEW THE DATATABLE FOR THE SCHEMA AND IT APPEARS CORRECT
// THE COLUMNS THAT DON'T WORK HAVE SPECIFICATIONS IDENTICAL TO THE COLUMNS THAT DO WORK
У кого-нибудь было такие проблемы, используя Sybase и Ado?
Спасибо, Джон К.
Решение
Задача решена! ... Проблема оказалась дифейсом в том, как нули были обработаны в SQL. ... У нас было несколько экземпляров в хранимой процедуре, которая использовала ненужные тесты NULSI. (x = null, а не x - это null) Инструменты SQL, которые я использовал для проверки этой проблемы, по умолчанию по умолчанию по умолчанию «Установите Ansinull», пока наш код ADO не был таким значением «SET ANSINULL». Из-за этого параметра код SQL, который тестировал на NULL, никогда не будет тестировать «True», позволяющий возвращать нулевое значение.