1. ホーム
  2. sql-server-2008

[解決済み] データプロバイダーや他のサービスがE_FAILステータスを返したのはなぜですか?SQLネイティブクライアント

2022-02-27 16:20:06

質問

ASP コードを SQL Native Client を使用するように変更して、フェールオーバー・パートナーのあるミラー・データベースに接続できるようにしています。 Driver={SQL Server} で nvarchar(max) カラムを返すプロックを実行すると、すべてがうまくいきます。 小さなカラムを返すプロックをDriver={SQL Server Native Client 10.0}で実行すると、問題なく動作します。 Driver={SQL Server Native Client 10.0}を使用して、nvarchar(max)カラムを返すプロックを実行しようとしたときだけ、エラーが発生するのです。 このエラーは、次のコマンドを実行するとすぐに発生します。

rs.Open cmdTemplate

だから、カラムを参照することもないんです。 connの文字列をこのように設定します。

if bUseSQLNative then
        connString = "Driver={SQL Server Native Client 10.0}; Network=DBMSSOCN; server=" & rs("SERVER_NAME") & "," & rs("PORT_NUM") & ";database=" & rs("DATABASE_NAME")
        connString = connString & ";uid=" & rs("USER_NAME") & ";pwd=" & UnProtectValueEx(ConnSaltForDBPwd(), rs("CONNECTION_NAME"), rs("PASSWORD"))
    else
        connString = "Driver={SQL Server}; Network=DBMSSOCN; server=" & rs("SERVER_NAME") & "," & rs("PORT_NUM") & ";database=" & rs("DATABASE_NAME")
        connString = connString & ";uid=" & rs("USER_NAME") & ";password=" & UnProtectValueEx(ConnSaltForDBPwd(), rs("CONNECTION_NAME"), rs("PASSWORD"))
    end if 
    connString = connString & ";"

そして、このようなオープニング。

set rs = server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.CursorType = 3
rs.CacheSize = 50

on error resume next
    rs.Open cmdTemplate

エラーは マイクロソフトカーサーエンジン (0x800A0001) データプロバイダまたは他のサービスがE_FAILステータスを返しました。

解決方法は?

発見しました。 私は

connString = "Provider=SQLNCLI10; DataTypeCompatibility=80;... 

DataTypeCompatibilityは、nvarchar maxなどをadoが扱える形式にマップバックさせます。 そして、なぜかこのパラメータは、Driver={SQL Server Native Client 10.0};では効果がなく、Provider=SQLNCLI10でのみ効果があります。