web-dev-qa-db-ja.com

Node.jsとTediousでSQL Serverに接続できない

Node.jsとTedioiusを使用してローカルSQL Serverインスタンスに接続しようとすると、次のエラーが発生します。

{ [ConnectionError: Failed to connect to XXXXX:1433 - connect ECONNREFUSED]
  name: 'ConnectionError',
  message: 'Failed to connect to XXXXX:1433 - connect ECONNREFUSED',
  code: 'ESOCKET' }

これが私の接続オブジェクトです:

var config = {
  userName: 'username',
  password: 'password',
  server: 'XXXXX',

  options: {
    database: 'databasename',
    instancename: 'SQLEXPRESS'
  }
};

チェックしたところ、TCP/IPが有効になっていて、Configuration Managerに従ってポート1443でブロードキャストしています。 SQL Serverブラウザサービスも実行されていますが、そうでない場合は、このタイプの問題が発生している可能性があります。ウイルス対策とファイアウォールを無効にしましたが、それも役に立ちませんでした。

何か洞察はありますか?

11
loganhuskins

つまり、Tediousでは「オプション」にインスタンス名を含めることができても、それを使用しないか、使用する必要があるため使用できないということです。調査を行った後、SQL Serverにインスタンス名を付けると、ポート1433からそのインスタンスに使用している動的ポートにリダイレクトされます。動的ポートを使用していることを知りませんでしたが、インスタンスに名前が付けられている場合、ポートは常に動的になります。 1433年にどこで放送されたのかわかりません。

動的ポートを確認するには、ここを見てください:

enter image description here

この情報から、コードを次のように変更しました。

var config = {
  userName: 'username',
  password: 'password',
  server: 'XXXXX',

  options: {
    port: 49175,
    database: 'databasename',
    instancename: 'SQLEXPRESS'
  }
};

これですべてが順調です。これが誰かに役立つことを願っています。

16
loganhuskins

他の誰かが私と同じようにSQL Serverを初めて使用し、この問題を扱っている場合は、次の手順に従ってSQL Server Config ManagerでTCP/IPを有効にします。

> SQLServerネットワーク構成

> YOURSQLSERVERINSTANCEのプロトコル

> TCP/IP

>有効にする

次のような警告メッセージが表示されます。

行った変更は保存されます。ただし、サービスを停止して再起動するまで有効になりません。

これは、SQL Server Management Studioのデータベースサービスから切断して再接続することを意味しますが、これはSQL Server ConfigManagerの[SQLServerサービス]タブで行う必要があります。 SQL Serverインスタンスを見つけて停止し、再起動してください。これは私にとって魅力のように働きました。奇妙なことに、名前付きパイププロトコルを有効にすると、再起動しなくても機能するように見えたので(エラーメッセージの違いがわかりました)、必要に応じて停止して再起動したことを確認しました。

また、必ず SQL Serverブラウザサービスを有効にする も確認してください。これとTCP/IPの有効化とサービスの再起動が、私にとっての鍵でした。

2

それでもこのエラーが発生する場合は、

"... 'Failed to connect to Server:1433-connect ECONNREFUSED Server IP:1433'、code: 'ESOCKET'}"

次のすべてをチェックしました。

  1. TCP/IPを有効にする
  2. ポート1433を開く
  3. 設定が正しく設定されました(データベース、サーバー、ユーザー名、パスワード}
  4. 動的ポートが構成されていません

SQLサーバーのバージョンを確認してください。私の場合、SQL 2012に接続できるが、同じコードでSQL Server 2016に接続できないことを発見しました。 SQL Server 2016は、面倒なドライバーではまだサポートされていないようです。

1
halfDigital

TCP/IPプロトコルを有効にしても問題が解決しない場合は、SQL Server Browserサービスが実行されていることを確認することをお勧めします。私の場合、それが実行されていないことに気付くまで、私は多くの時間を費やしました。

この構成は私にとっては問題なく実行されます。

 var config = {
     user: 'user',
     password: 'userPwd',
     server: 'localhost',
     database: 'myDatabase',
     options: {
         truestedConnection: true,
         instanceName: 'SQLEXPRESS'
    }
1
MarceloRB

... MSSQLSERVERのプロトコルでtcp/ipを有効にする必要があります

enter image description here

両方の認証をアクティブにします

enter image description here

0
Hugues Gauthier