【问题标题】:Problem using SQLDataReader with Sybase ASE将 SQLDataReader 与 Sybase ASE 一起使用时出现问题
【发布时间】:2011-01-05 21:49:03
【问题描述】:

我们正在开发一个使用 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。

【问题讨论】:

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

标签: c# ado.net sap-ase


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 2011-03-15
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多