2011-01-05 78 views
2

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

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

我们遇到的问题是......某些(可能是5%的列)返回NULL或0.如果我们调试并复制用于数据读取器的SQL语句并在另一个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的问题?


感谢, 约翰K.

+1

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

回答

1

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