Вопрос

Мы разрабатываем приложение отчетности, которое использует 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», позволяющий возвращать нулевое значение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top