2

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

我们在将数据拉入数据读取器(来自存储过程)时遇到问题。存储过程通过求和、计数和调用其他存储过程来计算值(大约 50 列)。

我们遇到的问题是......某些(可能是 5% 的列)返回 NULL 或 0。如果我们调试并复制用于数据读取器的 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 时遇到过这样的问题吗?


谢谢,约翰K。

4

1 回答 1

1

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

于 2011-03-03T18:34:07.870 回答