Tedious: SQL Server 2012 ECONNREFUSED

创建于 2012-12-08  ·  20评论  ·  资料来源: tediousjs/tedious

使用最新的 nodejs 和繁琐的版本以及以下代码:

var Connection = require('乏味').Connection;
var Request = require('乏味').Request;

变量配置 =
{
服务器:'192.168.1.113',
用户名:'我的用户名',
密码:'我的密码',
选项:
{
数据库:'我的数据库',
端口:'1433',
加密:真,
驱动程序:'SQL Server Native Client 11.0'
},
调试:
{
数据包:真实,
数据:真实,
有效载荷:真实,
令牌:真实,
日志:真实
}
};

var connection = new Connection(config);

connection.on('connect', 已连接);
connection.on('infoMessage', infoError);
connection.on('errorMessage', infoError);
connection.on('end', end);
connection.on('调试', 调试);

功能连接(错误)
{
console.log('connected=>' + err);
}

函数信息错误(信息)
{
console.log('infoError=>' + info);
}

功能调试(消息)
{
console.log('debug=> ' + message);
}

函数结束()
{
}

我运行后出现以下错误:

节点 test_sqlserver_tedious.js
调试=> 连接到 192.168.1.113:1433 - 失败错误:连接 ECONNREFUSED
调试 => 状态更改:连接 -> 最终
调试=> 连接到 192.168.1.113:1433 已关闭
调试=> 状态更改:最终 -> 最终

有任何想法吗? 如果你告诉我怎么做,我可以帮你测试源代码。

谢谢

最有用的评论

ECONNREFUSED 表明 192.168.1.113 未侦听端口 1433。

SQL Server 实例是否肯定启用了 TCP?
你能 telnet 到 192.168.1.113 上的 1433 端口吗(从你使用繁琐的系统)? 如果没有,可以直接从 192.168.1.113 telnet 到 1433 端口吗? 如果不是,则表明 SQL Server 未在该端口上侦听。 如果是,那么它表明某些东西(可能是防火墙)是问题的原因。

所有20条评论

ECONNREFUSED 表明 192.168.1.113 未侦听端口 1433。

SQL Server 实例是否肯定启用了 TCP?
你能 telnet 到 192.168.1.113 上的 1433 端口吗(从你使用繁琐的系统)? 如果没有,可以直接从 192.168.1.113 telnet 到 1433 端口吗? 如果不是,则表明 SQL Server 未在该端口上侦听。 如果是,那么它表明某些东西(可能是防火墙)是问题的原因。

我收到错误:

调试=> 连接到未定义:1433 - 失败错误:连接 ECONNREFUSED
调试 => 状态更改:连接 -> 最终
调试=> 与未定义的连接:1433 已关闭
调试=> 状态更改:最终 -> 最终

    debug=> connection to undefined:1433 closed

undefined看起来很可疑。 我希望在那里看到服务器名称或 IP 地址。

数据库服务器:192.168.11.8\SQLEXPRESS2008
数据库端口:1433

@flybluewolf请看一下问题 #68,因为我认为我的回答是相关的。

好的,现在似乎可以连接了。 但是当我尝试做一个简单的选择时,它就会挂起。

这是调试输出:

侦听端口 51981 的调试器
调试=> 连接到 127.0.0.1:1433
调试=> 状态更改:正在连接 -> SentPrelogin
调试=> 状态更改:SentPrelogin -> SentLogin7WithStandardLogin
infoError=> [对象对象]
infoError=> [对象对象]
debug=> 数据包大小从 4096 更改为 4096
调试=> 状态更改:SentLogin7WithStandardLogin -> LoggedInSendingInitialSql
调试=> 状态更改:LoggedInSendingInitialSql -> LoggedIn

这是我的代码:

var Connection = require('乏味').Connection;
var Request = require('乏味').Request;

变量配置 =
{
服务器:“127.0.0.1”,
用户名:“用户名”,
密码:“用户密码”,
数据库:“我的数据库”,
选项:
{
数据库:“我的数据库”,
// 端口:“1433”,
//加密:真,
// 驱动程序:“SQL Server Native Client 11.0”
},
调试:
{
数据包:真实,
数据:真实,
有效载荷:真实,
令牌:真实,
日志:真实
}
};

var connection = new Connection(config);

connection.on('connect', 已连接);
connection.on('infoMessage', infoError);
connection.on('errorMessage', infoError);
connection.on('end', end);
connection.on('调试', 调试);

功能连接(错误)
{
执行语句();
}

函数executeStatement()
{
var request = new Request("Select * from Property.PropertyGroups", function(err, row_count)
{
如果(错误)
{
}
别的
{
控制台日志(row_count);
}

    connection.close();
});

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

}

函数信息错误(信息)
{
var dd = 信息;
console.log('infoError=>' + info);
}

功能调试(消息)
{
var dd = 消息;
console.log('debug=> ' + message);
}

函数结束()
{
var dd = '';
}

我执行了“netstat -na”,但我没有找到 UDP 1444 端口

我在您的代码中没有看到对connection.exec...(request)任何调用。 所以请求没有被执行。 这与debug=> State change: ...消息一致。 一旦身份验证完成,它们就会停止。

嗯,好的,那成功了。 非常感谢:D

我认为@adviner@flybluewolf是同一个人,而且这个问题只处理一个问题?
如果我记错了,请随时重新打开。

不,他们是两个不同的人。 我开始了这篇文章,现在让它工作了。

您好,很抱歉恢复此功能,但是我在使用@adviner发布的最后一个代码片段时遇到了问题(当然,凭据已正确更改)。 我永远无法通过 SentPreLogin 阶段。 使用相同的代码,我得到的所有输出是:

调试=> 连接到 SERVERt:1433
调试=> 状态更改:正在连接 -> SentPrelogin
调试=> 状态更改:SentPrelogin -> SentLogin7WithStandardLogin
调试=> 与服务器的连接:1433 已关闭
调试=> 状态更改:SentLogin7WithStandardLogin -> 最终
调试=> 与服务器的连接:1433 已关闭
调试=> 状态更改:最终 -> 最终

(服务器网址被遮挡)。

数据库在 Azure 中运行,我可以从运行节点的机器 telnet 到它。

任何帮助,将不胜感激。

据我了解,Azure 数据库需要加密连接。
所以大概你在连接选项中使用encrypt: true连接? 我问是因为https://github.com/pekim/tedious/issues/65#issuecomment -11765693 已将此注释掉。

您使用的代码不会检查 Connection 回调connected函数中的错误。 您应该解决这个问题,因为您可能会在那里报告错误。

与节点 v0.10(和 v0.9)的加密繁琐连接被破坏。 有关更多信息,请参阅 #86,以及我认为可以解决问题的提交。

修复 v0.10 问题的同一提交也将加密密码默认为 RC4-MD5,因为我还没有设法使加密连接与 DES-CBC3-SHA 一起使用。 这也适用于节点 v0.8。

您可以尝试使用 master 中的最新代码来修复吗?

如果仍然失败,您能否将所有调试输出放入 gist 或 pastebin? 您应该获得很多详细信息,包括 TDS 数据包的十六进制转储。 您可能希望修改 login7 数据包中的一些细节。

感谢您的快速响应。 我已经解决了上一个错误,但现在我得到以下输出:

调试=> 连接到 XXX.database.windows.net:1433
调试=> 状态更改:正在连接 -> SentPrelogin
调试=> 状态更改:SentPrelogin -> SentTLSSSLNegotiation
调试=> TLS 协商(RC4-MD5、TLSv1/SSLv3)
调试=> 状态更改: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"}
登录失败; 应该发出一个或多个 errorMessage 事件
调试=> 状态更改:SentLogin7WithStandardLogin -> 最终
调试=> 与 XXXX.database.windows.net 的连接:1433 已关闭
调试=> 状态更改:最终 -> 最终

服务器名称被标记为 XXX(我假设),它是 azure db 连接字符串的一部分。

最后一个问题是我们的连接字符串的问题,现在一切正常。 谢谢!

极好的。
这是来自master的最新代码,还是乏味的发布版本?

从 master 克隆最新版本

尊敬的专家,
我遇到了同样的错误,但问题是我的错误是在建立连接后发生的,它正在将大文件插入数据库,我对小文件没有任何问题:

将数据添加到数据库
从数据库获取列
成功获取表列
向数据库添加行
行插入成功
将数据添加到数据库
从数据库获取列
成功获取表列
向数据库添加行
行插入成功
将数据添加到数据库
从数据库获取列
成功获取表列
向数据库添加行
行插入成功
将数据添加到数据库
从数据库获取列
成功获取表列
向数据库添加行
{ [ConnectionError: Failed to connect to localhost:1433 - connect EADDRINUSE 127 .0.0.1:1433] name: 'ConnectionError', message: 'Failed to connect to localhost:1433 - connect EADDRINUSE 127.0.0.1:1 433', code :'ESOCKET' }

感谢您的支持。

@Beniy你有我们可以用来重现这个的示例代码吗?

亲爱的亚瑟施瑞伯,
实际上,问题与代码无关,因为有时它正在解析文本文件并插入到数据库中,但有时会显示该错误,即使文件相同,条件相同但时间不同。
我想知道此任务的任何其他依赖项?

谢谢

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

tvrprasad picture tvrprasad  ·  5评论

arthurschreiber picture arthurschreiber  ·  8评论

ricklang picture ricklang  ·  9评论

yianni-ververis picture yianni-ververis  ·  5评论

jstephens7 picture jstephens7  ·  5评论