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 而不是地理数据的主要内容,如果未能解决你的问题,请参考以下文章

ms sql2012 能否安装在win2008 server

Sql server2008! SQL server服务无法启动,并显示错误17113, 修复Sql server2008失败!

sql server 的考证问题

求sql server帮助文档

已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具

server 2008 r2能安装sql server 2016吗?