LoginSignup
1
0

More than 5 years have passed since last update.

ConnectionStringのプロバイダー名に「.1」が付く意味

Posted at

経緯

Windows Server 2003からWindows Server 2008R2にIIS上の既存Webアプリケーションの移行作業をしていたところ、500エラーとなりIISログに「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」というエラーが出力されていた。
データベース(SQLServer)への接続が出来ないのがエラーの原因のようだ。

接続文字列の確認

ConnectionString = "Provider=SQLNCLI.1 …"
プロバイダー名に「.1」が付いていたので、これが怪しいと思った。
そもそも「.1」の意味を理解出来ていない、検索してみたことろ下記サイトがヒット。
「SQLOLEDB.1」と「SQLOLEDB」の違い

簡単に言えばバージョンです。 .1 を指定すれば明示的にバージョンを指定していることになります。 特定のバージョンに拘らないのであれば必要ありません。

バージョンということが分かったが、何のバージョン? もう少し調べてみる。
Connection String Syntax - MSDN

If two versions of a provider are installed on the same system, use the ProgID to specify exactly which version to use.
プロバイダの2つのバージョンが同じシステムにインストールされている場合、プログラムIDは正確に使用するバージョンを指定するために使用します。

その場合にレジストリの「HKEY_CLASSES_ROOT」には、下記のように2種類登録(例)されている。
HKEY_CLASSES_ROOT\SQLOLEDB
HKEY_CLASSES_ROOT\SQLOLEDB.1

そもそも「.1」を意識して付けることは無い気がする。きっとツールを使ったか、どこかのサイトを参考にでもしたんだろう。

特定のバージョンに拘らないならば不要ということで、「.1」は消して動かしてみた。
しかし、結果は変わらず同じエラーになってしまった。

調査ふりだし

32bitから64bitに変更したことが原因では無いかと思った。
以前OracleでClassic ASPにてデータベースを接続させた際には、32bit版のOracle Clientをインストールする必要があったためだ。また、IIS上の設定でも「32 ビットアプリケーションの有効化」を「True」にする必要がある。

SQLServerでも同様では無いかと思ったが、「x64 バージョンと Itanium バージョンの sqlncli.msi では、32 ビット バージョンの SQL Server Native Client もインストールされます。」との記述があり、32bit版ODBC データ ソース アドミニとレーター(%windir%\SysWOW64\odbcad32.exe)で確認してもドライバーは入っていることを確認した。

解決

IISの問題なのかデータベース接続が問題なのか切り分けする為に、VBScriptにデータベース接続部分を転記してデスクトップ上から確認すると、64bit上でも同じエラーが表示された。
よって、接続文字列が怪しいとして再度、見直すことにした。
するとドライバーのバージョンによってプロバイダー名が違っていた。
SQLServerの接続ドライバーは最新版(SQLServer 2014 Express)を導入。
Microsoft SQL Server 2005 Native Client (SQLNCLI – sqlncli.dll)
Microsoft SQL Server 2008 Native Client (SQLNCLI Ver.10 – sqlncli10.dll)
Microsoft SQL Server 2012 Native Client (SQLNCLI Ver.11 – sqlncli11.dll)
※SQLServer 2014は、SQL Server 2012 Native Clientを使用する。

プロバイダー名を「SQLNCLI11」に変更したところ正常に接続することが出来た。
ConnectionString = "Provider=SQLNCLI11 …"

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0