Tedious: SQL Server 2012 ECONNREFUSED

作成日 2012年12月08日  ·  20コメント  ·  ソース: tediousjs/tedious

最新のnodejsと面倒なバージョンおよび次のコードを使用します。

var Connection = require( 'tedious')。Connection;
var Request = require( 'tedious')。Request;

var config =
{{
サーバー: '192.168.1.113'、
userName: 'myUserName'、
パスワード: 'myPassword'、
オプション:
{{
データベース: 'MyDatabase'、
ポート: '1433'、
暗号化:true、
ドライバー: 'SQLServerネイティブクライアント11.0'
}、
デバッグ:
{{
パケット:true、
データ:true、
ペイロード:true、
トークン:true、
ログ:true
}
};

var connection = new Connection(config);

connection.on( 'connect'、connected);
connection.on( 'infoMessage'、infoError);
connection.on( 'errorMessage'、infoError);
connection.on( 'end'、end);
connection.on( 'debug'、debug);

関数connected(err)
{{
console.log( 'connected =>' + err);
}

関数infoError(info)
{{
console.log( 'infoError =>' + info);
}

関数debug(メッセージ)
{{
console.log( 'debug =>' +メッセージ);
}

関数end()
{{
}

実行した後、次のエラーが発生します。

ノードtest_sqlserver_tedious.js
debug => 192.168.1.113:1433への接続-失敗エラー:接続ECONNREFUSED
debug =>状態の変更:接続->最終
debug => 192.168.1.113:1433への接続が閉じられました
debug =>状態の変更:最終->最終

何か案は? 方法を教えていただければ、ソースのテストをお手伝いできます。

ありがとう

最も参考になるコメント

ECONNREFUSEDは、192.168.1.113がポート1433でリッスンしていないことを示しています。

SQL ServerインスタンスでTCPが確実に有効になっていますか?
192.168.1.113のポート1433にtelnetで接続できますか(面倒な使用をしているシステムから)? そうでない場合は、192.168.1.113から直接ポート1433にtelnetで接続できますか? いいえの場合は、SQLServerがポートをリッスンしていないことを示しています。 はいの場合、何か(おそらくファイアウォール)が問題の原因であることを示唆しています。

全てのコメント20件

ECONNREFUSEDは、192.168.1.113がポート1433でリッスンしていないことを示しています。

SQL ServerインスタンスでTCPが確実に有効になっていますか?
192.168.1.113のポート1433にtelnetで接続できますか(面倒な使用をしているシステムから)? そうでない場合は、192.168.1.113から直接ポート1433にtelnetで接続できますか? いいえの場合は、SQLServerがポートをリッスンしていないことを示しています。 はいの場合、何か(おそらくファイアウォール)が問題の原因であることを示唆しています。

エラーが発生します:

debug => undefined:1433への接続-失敗エラー:接続ECONNREFUSED
debug =>状態の変更:接続->最終
debug => undefined:1433への接続が閉じられました
debug =>状態の変更:最終->最終

    debug=> connection to undefined:1433 closed

undefinedは疑わしいようです。 そこにサーバー名またはIPアドレスが表示されると思います。

dbServer:192.168.11.8 \ SQLEXPRESS2008
dbPort:1433

@flybluewolfは、私の答えが適切だと思うので、問題#68を見てください。

OK、接続しているようです。 しかし、単純な選択を行おうとすると、ハングします。

デバッグ出力は次のとおりです。

ポート51981でリッスンしているデバッガー
debug => 127.0.0.1:1433に接続
debug =>状態の変更:接続-> SentPrelogin
debug =>状態の変更:SentPrelogin-> SentLogin7WithStandardLogin
infoError => [オブジェクトオブジェクト]
infoError => [オブジェクトオブジェクト]
debug =>パケットサイズが4096から4096に変更されました
debug =>状態の変更:SentLogin7WithStandardLogin-> LoggedInSendingInitialSql
debug =>状態の変更:LoggedInSendingInitialSql-> LoggedIn

これが私のコードです:

var Connection = require( 'tedious')。Connection;
var Request = require( 'tedious')。Request;

var config =
{{
サーバー: "127.0.0.1"、
userName: "username"、
パスワード: "userpassword"、
データベース: "MyDatabase"、
オプション:
{{
データベース: "MyDatabase"、
//ポート: "1433"、
//暗号化:true、
//ドライバー: "SQL Server Native Client 11.0"
}、
デバッグ:
{{
パケット:true、
データ:true、
ペイロード:true、
トークン:true、
ログ:true
}
};

var connection = new Connection(config);

connection.on( 'connect'、connected);
connection.on( 'infoMessage'、infoError);
connection.on( 'errorMessage'、infoError);
connection.on( 'end'、end);
connection.on( 'debug'、debug);

関数connected(err)
{{
executeStatement();
}

関数executeStatement()
{{
var request = new Request( "Select * from Property.PropertyGroups"、function(err、row_count)
{{
if(err)
{{
}
そうしないと
{{
console.log(row_count);
}

    connection.close();
});

request.on('row', function(columns)
{
    columns.forEach((function(column)
    {
        console.log(column.value);
    }))
})

}

関数infoError(info)
{{
var dd = info;
console.log( 'infoError =>' + info);
}

関数debug(メッセージ)
{{
var dd =メッセージ;
console.log( 'debug =>' +メッセージ);
}

関数end()
{{
var dd = '';
}

'netstat -na'を実行しましたが、UDP1444ポートが見つかりません

コードにconnection.exec...(request)呼び出しがありません。 そのため、リクエストは実行されていません。 これはdebug=> State change: ...メッセージと一致しています。 認証が完了すると停止します。

うーん、OK、それはトリックをしました。 どうもありがとうございました:D

@adviner@flybluewolfは同じ人物であり、この問題は1つの問題のみを扱っていると思いますか?
間違えた場合は、お気軽に再開してください。

いいえ、彼らは2人の異なる人です。 私は投稿を開始し、現在は機能しています。

こんにちは、これを復活させて申し訳ありませんが、 @ advinerによって投稿された最後のコードスニペットを使用すると問題が

debug => SERVERt:1433に接続
debug =>状態の変更:接続-> SentPrelogin
debug =>状態の変更:SentPrelogin-> SentLogin7WithStandardLogin
debug => SERVER:1433への接続が閉じられました
debug =>状態の変更:SentLogin7WithStandardLogin-> Final
debug => SERVER:1433への接続が閉じられました
debug =>状態の変更:最終->最終

(サーバーのURLが不明瞭)。

データベースはAzureで実行されており、マシンを実行しているノードからデータベースにtelnetで接続できます。

どんな助けでもいただければ幸いです。

私が理解しているように、Azureデータベースには暗号化された接続が必要です。
それで、おそらくあなたは接続オプションでencrypt: trueで接続していますか? https://github.com/pekim/tedious/issues/65#issuecomment-11765693がこれをコメントアウトしているので質問します。

使用しているコードは、接続コールバック、 connected関数のエラーをチェックしません。 そこにエラーが報告される可能性があるため、これを修正する必要があります。

ノードv0.10(およびv0.9)との暗号化された面倒な接続が切断されました。 もう少し詳しい情報と、問題が解決すると私が信じているコミットについては、#86を参照してください。

v0.10の問題を修正する同じコミットでは、暗号化された接続をDES-CBC3-SHAで機能させることができていないため、暗号化暗号もデフォルトでRC4-MD5に設定されます。 これはノードv0.8にも当てはまります。

マスターで最新のコードを使用して修正を取得してみてください。

それでも失敗する場合は、すべてのデバッグ出力を要点またはペーストビンに入れてください。 TDSパケットの16進ダンプなど、多くの詳細を取得する必要があります。 login7パケットからいくつかの詳細を編集することをお勧めします。

迅速な対応に感謝します。 前のエラーを過ぎましたが、次の出力が得られます。

debug => XXX.database.windows.net:1433に接続
debug =>状態の変更:接続-> SentPrelogin
debug =>状態の変更:SentPrelogin-> SentTLSSSLNegotiation
debug => TLSネゴシエート(RC4-MD5、TLSv1 / SSLv3)
debug =>状態の変更:SentTLSSSLNegotiation-> SentLogin7WithStandardLogin
infoError => [オブジェクトオブジェクト]
{"number":40531、 "state":1、 "class":11、 "message": "サーバー名を特定できません。サーバーのDNS名(servername.database.windows.net)の最初のセグメントとして表示される必要があります)。一部のライブラリはサーバー名を送信しません。その場合、サーバー名をユーザー名(username @ servername)の一部として含める必要があります。さらに、両方の形式を使用する場合は、サーバー名が一致する必要があります。 "、" serverName ":" "、" procName ":" "、" lineNumber ":1、" name ":" ERROR "、" event ":" errorMessage "}
ログインに失敗しました; 1つ以上のerrorMessageイベントが発行されている必要があります
debug =>状態の変更:SentLogin7WithStandardLogin-> Final
debug => XXXX.database.windows.net:1433への接続が閉じられました
debug =>状態の変更:最終->最終

サーバー名はXXX(私が推測する)としてマークされており、azuredbの接続文字列の一部です。

最後の問題は、接続文字列の問題でした。すべてが機能しています。 ありがとうございました!

素晴らしい。
これはマスターからの最新のコードでしたか、それとも退屈なリリースバージョンでしたか?

マスターから最新バージョンのクローンを作成

親愛なる専門家、
私は同じエラーに直面しましたが、問題は接続が確立された後にエラーが発生し、データベースに大きなファイルが挿入されていることです。小さなファイルには問題はありません。

databseへのデータの追加
dbから列を取得する
テーブル列を正常に取得しました
DBに行を追加する
行が正常に挿入されました
databseへのデータの追加
dbから列を取得する
テーブル列を正常に取得しました
DBへの行の追加
行が正常に挿入されました
databseへのデータの追加
dbから列を取得する
テーブル列を正常に取得しました
DBに行を追加する
行が正常に挿入されました
databseへのデータの追加
dbから列を取得する
テーブル列を正常に取得しました
DBへの行の追加
{[ConnectionError: localhost:1433への接続に失敗しました-EADDRINUSE 127 .0.0.1:1433に接続します]名前: 'ConnectionError'、メッセージ: ' localhost:1433への接続に失敗しました-EADDRINUSE 127.0.0.1:1433に接続します'、コード: 'ESOCKET'}

どうぞよろしくお願いいたします。

@Beniyこれを再現するために使用できるサンプルコードはありますか?

親愛なるアーサーシュライバー、
実際には、問題はコードに関連することはできません。テキストファイルを解析してdbに挿入している場合もありますが、同じファイル、同じ条件で、異なる時間であっても、エラーが表示される場合があります。
このタスクに対する他の依存関係を知りたいですか?

ありがとう

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

anthonylau picture anthonylau  ·  8コメント

arthurschreiber picture arthurschreiber  ·  8コメント

codethyme picture codethyme  ·  7コメント

tvrprasad picture tvrprasad  ·  6コメント

David-Engel picture David-Engel  ·  5コメント