在Sybase ASE中使用SQLDataReader时出现问题

时间:2011-01-05 21:49:03

标签: c# ado.net sybase-ase

我们正在开发一个使用asp.net-mvc(.net 4)的报告应用程序。我们通过DDTEK.Sybase中间件连接到Sybase ASE 12.5数据库。

我们在将数据拉入datareader(来自存储过程)时遇到问题。存储过程通过执行求和,计数和调用其他存储过程来计算值(大约50列) 我们遇到的问题是......确定(可能有5%的列)返回NULL或0.如果我们调试并复制用于datareader的SQL语句并在另一个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这样的问题?


谢谢, John K.

1 个答案:

答案 0 :(得分:1)

问题解决了! ...问题结果证明在SQL中处理空值的方式存在差异。 ...我们在存储过程中有几个使用非ansi null测试的实例。 (x = null而不是x为null)我用来测试此问题的SQL工具是将“SET ANSINULL”默认为OFF,而我们的ADO代码不是“SET ANSINULL”值为ON。由于此设置,测试为null的SQL代码永远不会测试“TRUE”,从而允许返回null值。