2011-01-05 5 views
2

Мы разрабатываем приложение для отчетов, использующее asp.net-mvc (.net 4). Мы подключаемся через промежуточное ПО DDTEK.Sybase к базе данных Sybase ASE 12.5.

У нас возникли проблемы с извлечением данных в datareader (из хранимой процедуры). Хранимая процедура вычисляет значения (приблизительно 50 столбцов) путем выполнения сумм, подсчетов и вызова других хранимых процедур.

Проблема, с которой мы столкнулись, - это ... (возможно, 5% столбцов) возвращается с NULL или 0. Если мы отлаживаем и копируем инструкцию SQL, используемую для datareader, и запускаем ее внутри другого инструмента SQL, мы получить все допустимые значения для всех столбцов.


Проблема с использованием SQLDataReader с Sybase ASE


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?


Спасибо, Джон К.

+1

Проблема решена! ... Проблема оказалась разной в том, как нули были обработаны в SQL. ... У нас было несколько экземпляров в хранимой процедуре, в которых использовались тесты без ansi null. (x = null, а не x равно null). Инструменты SQL, которые я использовал для проверки этой проблемы, не выполняли настройку «SET ANSINULL» на OFF, в то время как наш код ADO был не таким, чтобы значение «SET ANSINULL» было включено. Из-за этого параметра SQL-код, который проверял значение null, никогда не будет проверять «TRUE», позволяя вернуть значение null. –

ответ

1

проблема решена! ... Проблема оказалась разнородной в том, как NULL обрабатывались в SQL. ... У нас было несколько экземпляров в хранимой процедуре, в которых использовались ненулевые тесты ansi. (x = null, а не x равно null). Инструменты SQL, которые я использовал для проверки этой проблемы, не выполняли настройку «SET ANSINULL» на OFF, в то время как наш код ADO был не таким, чтобы значение «SET ANSINULL» было включено. Из-за этого параметра SQL-код, который проверял значение null, никогда не будет проверять «TRUE», позволяя вернуть значение null.

Смежные вопросы