1

いくつかの背景:

2つの異なるVMでSQLServerの2つの異なるインストールを実行しています。コード(SQL Server 2008 R2用に作成されたもの)からそれらに接続しようとしています。私の現在の.NETFrameworkのバージョンは4.0です。私のMicrosoftSQLServer 2008 R2インストールはそのために設計されたAdventureWorksを実行しており、私のSQL Server2012Expressインストールは新しいAdventureWorks2012データベースを実行しています。Person.Addressにクエリを実行しています。

現在、「DataTypeをnullにすることはできません」という例外が発生しています。返されたスキーマを見て、問題はSQLServer2012が

Microsoft.SqlServer.Types.SqlGeography

データ・タイプ。Type.GetTypeはこれを使用可能なものに変換できず、例外をスローするようです。私がやったことは何もないので安心しましたが、このコードは普遍的に機能するはずなので、私も困惑しています。このコードはSQLServer2008 R2で問題なく実行されることに注意してください(空間データ型がないため)。

私はこれを処理するための100の悪い方法を考えることができました。しかし、私はあなたたちに何をすべきかについての提案を求めに来たかったのです。.NETを4.5にアップグレードすると、状況は改善されますか?新しいデータ型に対応するためにコードを変更する必要がありますか?アプリケーションが空間データ型を処理しない場合、空間データ型について心配する必要がありますか?明らかにSqlClientとType.GetTypeはうまく機能しないため、これをどのように処理しますか。

ありがとうございました!

4

1 に答える 1

0

2012 および 2008 R2 を使用している場合は、SQL 2012 の SqlGeography 型を強制的に使用することをお勧めします。

アセンブリ リダイレクトを追加することを検討すると、2008 R2 SqlGeograph をロードしようとする .NET コードはすべて SQL 2012 SqlGeography として扱われます。通常、SQL ライブラリは、シリアル化されている場合 (可能な場合、つまり、CurvePolygon などの SQL 2012 固有の機能が使用されていない場合)、下位互換性があります。

<runtime>
  <assemblyBinding>
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="11.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
于 2013-02-21T16:06:59.183 に答える