Problema usando Sqldatarader com Sybase ASE
-
25-09-2019 - |
Pergunta
Estamos desenvolvendo um aplicativo de relatório que usa ASP.NET-MVC (.NET 4). Conectamos o middleware ddtek.sybase a um banco de dados Sybase ASE 12.5.
Estamos tendo problemas para atrair dados em um DataReader (de um procedimento armazenado). O procedimento armazenado calcula valores (aproximadamente 50 colunas) fazendo somas, contagens e chamando outros procedimentos armazenados.
O problema que estamos enfrentando é ... certo (talvez 5% das colunas) volte com NULL ou 0. Se depurarmos e copiarmos a instrução SQL sendo usada para o DataReader e o executarmos dentro de outra ferramenta SQL, obtemos todos válidos valores para todas as colunas.
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
Alguém teve problemas como esse usando Sybase e ADO?
Obrigado, John K.
Solução
Problema resolvido! ... O problema acabou sendo uma diferença na maneira como os nulos foram tratados no SQL. ... Tivemos várias instâncias no procedimento armazenado que usavam testes não nulos. (x = nulo em vez de x é nulo) As ferramentas SQL que eu usava para testar esse problema estavam inadando o "conjunto Ansinull" para desligar enquanto nosso código de ADO não era para que o valor "Set Ansinull". Devido a essa configuração, o código SQL que testado para NULL nunca testaria "verdadeiro", permitindo que o valor nulo fosse retornado.