c# - AseDataReader 抛出的 System.NullReferenceException

标签 c# sap-ase

我正在使用 Sybase.AdoNet2.AseClient 从控制台 C# 应用程序访问 Sybase ASE 数据。并非总是如此,但有时我会使用以下代码得到 System.NullReferenceException。

它在只启动一个应用程序时运行良好,但如果我在我的机器上同时启动 10 个进程,则会失败并出现此异常。

public void Dummy()
{
    List<string> valueList = new List<string>();

    AseParameter[] arParms = new AseParameter[1];
    arParms[0] = new AseParameter("@date", AseDbType.Date);
    arParms[0].Value = Convert.ToDateTime("1/08/2010");

    AseCommand spCommand = new AseCommand();
    spCommand.CommandType = CommandType.StoredProcedure;
    spCommand.Connection = connection;
    spCommand.CommandText = "MyStoredProcedure";

    spCommand.Parameters.AddRange(arParms);

    AseDataReader reader = spCommand.ExecuteReader();
    while (reader.Read())
    {
        if (reader["MyColumn"] != DBNull.Value)
            valueList.Add(reader["MyColumn"].ToString());
    }
}

它发生在“while (reader.Read())”这一行,有如下调用栈。

System.NullReferenceException:对象引用未设置到对象的实例。 在 Sybase.Data.AseClient1.AseDataReader.Read()
在 Sybase.Data.AseClient.AseDataReader.Read()
在虚拟()

如果有人能帮助我,我将不胜感激。

最佳答案

我猜 spCommand.ExecuteReader() 不是返回空的读取器,而是返回 null 对象。在这种情况下,我建议在阅读之前检查它是否为空:

AseDataReader reader = spCommand.ExecuteReader();
if(reader != null)
   while (reader.Read())
   {
        if (reader["MyColumn"] != DBNull.Value)
            valueList.Add(reader["MyColumn"].ToString());
   }

关于c# - AseDataReader 抛出的 System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519058/

相关文章:

c# - 我究竟做错了什么?在构造函数中使用依赖属性的值

c# - Lambda 表达式搜索

SQL select 语句结合不同的表

delphi - 使用 GetTableNames 所需的权限

c# - 使用 GetResponseStream 和 SpreadsheetDocument.Open 读取 xls 流

c# - 保存包的 breezejs 问题

c# - 如何更改在 ListView 中用作 ItemTemplate 的 UserControl 的 VisualState

sybase - 分区表: impossible to enforce index uniqueness across partitions with a local index

php - 修补 PHP 5.3.10 以支持 sybase_next_result()

sybase - 如何在sybase ase中检查表的权限