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ブラウザサービスも実行されていますが、そうでない場合は、このタイプの問題が発生している可能性があります。ウイルス対策とファイアウォールを無効にしましたが、それも役に立ちませんでした。
何か洞察はありますか?
つまり、Tediousでは「オプション」にインスタンス名を含めることができても、それを使用しないか、使用する必要があるため使用できないということです。調査を行った後、SQL Serverにインスタンス名を付けると、ポート1433からそのインスタンスに使用している動的ポートにリダイレクトされます。動的ポートを使用していることを知りませんでしたが、インスタンスに名前が付けられている場合、ポートは常に動的になります。 1433年にどこで放送されたのかわかりません。
動的ポートを確認するには、ここを見てください:
この情報から、コードを次のように変更しました。
var config = {
userName: 'username',
password: 'password',
server: 'XXXXX',
options: {
port: 49175,
database: 'databasename',
instancename: 'SQLEXPRESS'
}
};
これですべてが順調です。これが誰かに役立つことを願っています。
他の誰かが私と同じように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の有効化とサービスの再起動が、私にとっての鍵でした。
それでもこのエラーが発生する場合は、
"... 'Failed to connect to Server:1433-connect ECONNREFUSED Server IP:1433'、code: 'ESOCKET'}"
次のすべてをチェックしました。
SQLサーバーのバージョンを確認してください。私の場合、SQL 2012に接続できるが、同じコードでSQL Server 2016に接続できないことを発見しました。 SQL Server 2016は、面倒なドライバーではまだサポートされていないようです。
TCP/IPプロトコルを有効にしても問題が解決しない場合は、SQL Server Browserサービスが実行されていることを確認することをお勧めします。私の場合、それが実行されていないことに気付くまで、私は多くの時間を費やしました。
この構成は私にとっては問題なく実行されます。
var config = {
user: 'user',
password: 'userPwd',
server: 'localhost',
database: 'myDatabase',
options: {
truestedConnection: true,
instanceName: 'SQLEXPRESS'
}