ShapeファイルからSQL Serverにインポートするツールを作成したのですが、
SQL Serverが異なる環境の場合、インポートが失敗したのでその際のメモです。
インポートを行った環境は以下の通りです。ローカル環境では、問題なくインポートが成功しましたが、サーバー環境でインポートが失敗しました。
ローカル環境 | サーバー環境 | |
OS | Windows 10 pro | Windows Serer 2016 |
SQL Server | SQL server 2014 Express | SQL server 2019 |
SqlServer.Types | SqlServerSpatial120.dll | SqlServerSpatial150.dll |
原因
失敗した環境の、SQL Serverとツールで使用しているSqlServer.Typesのバージョンが異なっていたため例外BadImageFormatExceptionが発生していたようです。
以下、例外のメッセージです。
1 2 3 4 5 |
2021-10-20 11:02:56,610 [1] ERROR System.BadImageFormatException: 間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外:0x8007000B) 場所 Microsoft.SqlServer.Types.GLNativeMethods.SetClrFeatureSwitchMap(Int32 clrFeatureSwitchMap) 場所 Microsoft.SqlServer.Types.SqlGeometry.IsValidExpensive() 場所 Microsoft.SqlServer.Types.SqlGeometry.Construct(GeoData g, Int32 srid) 場所 Microsoft.SqlServer.Types.SqlGeometry.GeometryFromText(OpenGisType type, SqlChars text, Int32 srid) |
対策
ツールでは、SqlServerSpatial120.dllが必要になるのですが、サーバー環境では、System32にはインストールされていません。ですので、SqlServerSpatial120.dllをサーバーにインストールします。
SqlServerSpatial120.dllをサーバーにインストールするには、SQL Server 2014用の
SQLSysClrTypes.msiをダウンロードします。ネットから「SQL Server 2014 Feature Pack」を検索または、以下のサイトから、SQLSysClrTypes.msiを選択し、ダウンロードします。
https://www.microsoft.com/ja-jp/download/details.aspx?id=42295
ダウンロード後、サーバー環境から、SQLSysClrTypes.msiを実行します。
サーバー環境では、System32を確認すると、SqlServerSpatial120.dllがインストールされています。
ちなみに、bin配下にSqlServerSpatial120.dll置いていましたが、参照してくれていないようです。