SQL Server DataReader.GetField 返回 null 而不是地理数据

Posted

技术标签:

【中文标题】SQL Server DataReader.GetField 返回 null 而不是地理数据【英文标题】:SQL Server DataReader.GetField returned null instead of geography data 【发布时间】:2019-08-23 07:07:12 【问题描述】:

我有一个 Microsoft SQL Server 2008 (SP3) 数据库。我能够使用 Geography 数据类型将一些地理空间数据写入表中。

我现在正在尝试从数据库中读取数据,但出现错误:

DataReader.GetField(2) 返回 null

数据栏中当然有信息。

下面的代码很简单。我正在使用 .NET Framework 4.7。有什么明显的事情我没有处理吗?

string sql = @"
    SELECT *
    FROM Locations
    WHERE LocID= " + tableOutput.OID.ToString();

System.Data.DataSet ds = Database.RequestData(sql);

static public System.Data.DataSet RequestData(string sql)

    System.Data.DataSet ds = null;
    try
    
        using (SqlConnection conn = new SqlConnection(connectionString))
        
            conn.Open();
            using (SqlDataAdapter importer = new SqlDataAdapter(sql, conn))
            
                ds = new System.Data.DataSet();
                importer.Fill(ds, "Data");
                return ds;
            
        
    
    catch (Exception e)
    
        Logger.Write(e.Message);
        return ds;
    

【问题讨论】:

你可能需要nuget.org/packages/Microsoft.SqlServer.Types @IanKemp 感谢您的想法,我确实从 MS 论坛中找到了这些说明。我曾希望这会得到修复,但它仍然返回相同的错误。 【参考方案1】:

我需要做两件事来解决这个问题:

首先从 NuGet 管理器下载 Microsoft.SqlServer.Types。

然后我需要手动将依赖添加到项目根目录下的 App.config 中

  <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
  </dependentAssembly>

【讨论】:

以上是关于SQL Server DataReader.GetField 返回 null 而不是地理数据的主要内容,如果未能解决你的问题,请参考以下文章