2017-07-31 8 views
3

dotnetcore 1.1を使用していて、SQLサーバーバージョン8.00.2055に接続しようとしています。 SQLServer 2016年までの1とSQL Server 8.00.2055(SQL Server 2000の?)この第二の接続を確立できませんでしたログインネゴシエーション中にSQL Serverインスタンスが無効またはサポートされていないプロトコルバージョンを返しました

に別の1:

は私がプロジェクト内の2つの接続を持っています。ここで私は取得していますエラーは次のとおりです。

2017-07-31T11:34:24.8747442 + 02:00 0HL6NUT8S82KF [ERR]ユーザー: - SQL Serverインスタンスは、ログインネゴシエーション中に無効またはサポートされていないプロトコルのバージョンを返しました。私が使用しています(637b11d7)

接続文字列は、このエラーを修正する方法Server=MyServerHost; Initial Catalog=MyDatabaseName; User id=sa; Password=********;

任意のアイデアですか?

+2

バージョン8.xは、実際にはSQL Server 2000です。 –

答えて

3

.NET Coreは、SQL Server 2005よりも低いバージョンのSQL Serverをサポートしていません。むしろ、TDS 7.2(SQL Server 2005で導入されたバージョン)よりも低いTDSプロトコルをサポートしていません。 sourceの該当ビット:参考

a.tdsVersion = (UInt32)((((((b[0] << 8) | b[1]) << 8) | b[2]) << 8) | b[3]); // bytes are in motorola order (high byte first) 
UInt32 majorMinor = a.tdsVersion & 0xff00ffff; 
UInt32 increment = (a.tdsVersion >> 16) & 0xff; 

// Server responds: 
// 0x07000000 -> Sphinx   // Notice server response format is different for bwd compat 
// 0x07010000 -> Shiloh RTM  // Notice server response format is different for bwd compat 
// 0x71000001 -> Shiloh SP1 
// 0x72xx0002 -> Yukon RTM 
// information provided by S. Ashwin 

switch (majorMinor) 
{ 
    case TdsEnums.YUKON_MAJOR << 24 | TdsEnums.YUKON_RTM_MINOR:  // Yukon 
     if (increment != TdsEnums.YUKON_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isYukon = true; 
     break; 
    case TdsEnums.KATMAI_MAJOR << 24 | TdsEnums.KATMAI_MINOR: 
     if (increment != TdsEnums.KATMAI_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isKatmai = true; 
     break; 
    case TdsEnums.DENALI_MAJOR << 24 | TdsEnums.DENALI_MINOR: 
     if (increment != TdsEnums.DENALI_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isDenali = true; 
     break; 
    default: 
     throw SQL.InvalidTDSVersion(); 
} 

:スフィンクスはデナリは、2012(これらは、コード名)で、カトマイは2008で、ユーコン準州は2005で、シロは2000年である、7.0です。ここで確認されたバージョンは、TDSプロトコルのバージョンであり、SQL Serverのバージョンではないため、これらの名前は誤解を招くものです。 SQL Server 2012、2014および2016はすべてTDS 7.4(this reference)を使用しているため、Denali以外のチェックはありません。ここで

は、.NET Frameworkのreference sourceからのコードの同じ部分です:TDS 7.0および7.1のための

a.tdsVersion = (UInt32)((((((b[0]<<8)|b[1])<<8)|b[2])<<8)|b[3]); // bytes are in motorola order (high byte first) 
UInt32 majorMinor = a.tdsVersion & 0xff00ffff; 
UInt32 increment = (a.tdsVersion >> 16) & 0xff; 

// Server responds: 
// 0x07000000 -> Sphinx   // Notice server response format is different for bwd compat 
// 0x07010000 -> Shiloh RTM  // Notice server response format is different for bwd compat 
// 0x71000001 -> Shiloh SP1 
// 0x72xx0002 -> Yukon RTM 
// information provided by S. Ashwin 

switch (majorMinor) { 
    case TdsEnums.SPHINXORSHILOH_MAJOR<<24|TdsEnums.DEFAULT_MINOR: // Sphinx & Shiloh RTM 
     // note that sphinx and shiloh_rtm can only be distinguished by the increment 
     switch (increment) { 
      case TdsEnums.SHILOH_INCREMENT: 
       _isShiloh = true; 
       break; 
      case TdsEnums.SPHINX_INCREMENT: 
       // no flag will be set 
       break; 
      default: 
       throw SQL.InvalidTDSVersion(); 
     } 
     break; 
    case TdsEnums.SHILOHSP1_MAJOR<<24|TdsEnums.SHILOHSP1_MINOR: // Shiloh SP1 
     if (increment != TdsEnums.SHILOHSP1_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isShilohSP1 = true; 
     break; 
    case TdsEnums.YUKON_MAJOR<<24|TdsEnums.YUKON_RTM_MINOR:  // Yukon 
     if (increment != TdsEnums.YUKON_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isYukon = true; 
     break; 
    case TdsEnums.KATMAI_MAJOR<<24|TdsEnums.KATMAI_MINOR: 
     if (increment != TdsEnums.KATMAI_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isKatmai = true; 
     break; 
    case TdsEnums.DENALI_MAJOR << 24|TdsEnums.DENALI_MINOR: 
     if (increment != TdsEnums.DENALI_INCREMENT) { throw SQL.InvalidTDSVersion(); } 
     _isDenali = true; 
     break; 
    default: 
     throw SQL.InvalidTDSVersion(); 
} 

サポートがはっきりと見えます。

.NET CoreのSQL Server 2005よりも低いものをサポートしないという決定については、オンラインで情報を見つけることができず、サポートの欠如は、最も早いコミット(2015年9月以降)で既に存在しています。 2013年以降、SQL Server 2000のサポートが延長されたことを考えると、これは不合理ではありません。

簡潔に言えば、完全な.NET Framework(SQL Server 2000のサポートは中止されていません)またはサーバーのアップグレード(強くお勧めします)です。おそらく、SQL Server 2000のサポートを.NET Coreにバックポートするためのコードをforkすることもできますが、これはほとんど効果がありません。

関連する問題