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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top