.NET Core が SQL DB に接続できない

私の場合、データベースには ASP.NET Web API と Windows フォーム アプリを介してアクセスできました。しかし、.Net Core API は機能していませんでした。

この問題の解決策は、接続文字列にポート番号を追加することです。

たとえば、以下に指定されている接続文字列は、.NET Framework アプリの例です。

data source=SERVER\SQLSERVER2017;initial catalog=DBNAME;persist security info=True;user id=ADMIN;password=ADMIN123;MultipleActiveResultSets=True;App=EntityFramework

このリンクに従って、ポート番号を DB インスタンスに設定しました。

カンマの後のポート番号が鍵です。

接続文字列を次のように変更します:

Server=SERVER\\SQLSERVER2017,1433;Database=DBNAME;User Id=ADMIN; Password=ADMIN123;MultipleActiveResultSets=True;

同様の (または同一の?) 問題が発生しました。 .NET Core は接続文字列では機能しませんでしたが、.NET Framework は同じ文字列で問題なく機能しました。これは、接続文字列がデータベース サーバーの IP ホスト名ではなく SQL エイリアスを使用していたためであることが判明し、Windowsy/registry-y すぎるため、.NET Core が SQL エイリアスのサポートを中止しました。

IP ホスト名または番号を使用するように接続文字列を変更すると、問題が解決しました。

  • 問題に関する .NET チームのディスカッション:https://github.com/dotnet/corefx/issues/2575
  • 関連する SO の問題:たとえば、appsettings.json の ConnectionString の SQL エイリアスに関する問題。