SSIS脚本组件作为源Null值

时间:2018-01-25 08:44:23

标签: sql-server ssis etl adomd.net script-component

我在SSIS中有一个包,它使用来自essbase cube的adomd.Net加载数据。有2列包工作正常,但当我添加3.列包失败。

错误消息说:

  

对象引用未设置为对象的实例。

第一行中的第三列包含 null ,其他行包含一些值。

问题在3.列中的 null 值中查找。 我尝试了这个if语句但是我得到空列而不是值。

AdomdDataReader reader = null;
    try
    {
        using (AdomdConnection conn = new AdomdConnection(connectionString))
        {
            conn.Open();
            using (AdomdCommand cmd = new AdomdCommand(query, conn))
            {
                reader = cmd.ExecuteReader();

                while (reader.Read())
                {

                    Output0Buffer.AddRow();

                    Output0Buffer.Column = (reader.GetString(0));
                    Output0Buffer.Column1 = (reader.GetString(1));

                    if (!reader.IsDBNull(2))
                    {
                        Output0Buffer.Column2 = "test";
                    }
                    else
                    {
                        Output0Buffer.Column2 = (reader.GetString(2));
                    }

                    Console.WriteLine("fin");
                }
            }

        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);

        throw;
    }

1 个答案:

答案 0 :(得分:2)

这段代码的工作方式与预期相反:

 if (!reader.IsDBNull(2))
  {
      Output0Buffer.Column2 = "test";
  }
  else
  {
      Output0Buffer.Column2 = (reader.GetString(2));
  }

!reader.IsDBNull(2)表示值不为null。删除感叹号将解决问题