使用最新的 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 未在该端口上侦听。 如果是,那么它表明某些东西(可能是防火墙)是问题的原因。
我收到错误:
调试=> 连接到未定义: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你有我们可以用来重现这个的示例代码吗?
亲爱的亚瑟施瑞伯,
实际上,问题与代码无关,因为有时它正在解析文本文件并插入到数据库中,但有时会显示该错误,即使文件相同,条件相同但时间不同。
我想知道此任务的任何其他依赖项?
谢谢
最有用的评论
ECONNREFUSED 表明 192.168.1.113 未侦听端口 1433。
SQL Server 实例是否肯定启用了 TCP?
你能 telnet 到 192.168.1.113 上的 1433 端口吗(从你使用繁琐的系统)? 如果没有,可以直接从 192.168.1.113 telnet 到 1433 端口吗? 如果不是,则表明 SQL Server 未在该端口上侦听。 如果是,那么它表明某些东西(可能是防火墙)是问题的原因。