Sql server 节点表示多个SQL server连接
我需要连接到direfent服务器上的不同数据库。 服务器是Microsoft SQL Server 我是这样做的: dbconfig.js 之后,两个连接都处于活动状态,但当我查询第一个连接时,它不起作用 错误是无效的对象名称“FooDatabase.dbo.fooTable” 有人能帮我解决这个问题吗Sql server 节点表示多个SQL server连接,sql-server,node.js,express,database-connection,Sql Server,Node.js,Express,Database Connection,我需要连接到direfent服务器上的不同数据库。 服务器是Microsoft SQL Server 我是这样做的: dbconfig.js 之后,两个连接都处于活动状态,但当我查询第一个连接时,它不起作用 错误是无效的对象名称“FooDatabase.dbo.fooTable” 有人能帮我解决这个问题吗 谢谢 我使用MySQL实现,在创建连接之前,通过传递空数据库参数和字母更新数据库,您可以执行与mssql相同的操作 您不需要导入两次,只需在创建连接或查询之前更新数据库名称即可 const e
谢谢 我使用MySQL实现,在创建连接之前,通过传递空数据库参数和字母更新数据库,您可以执行与mssql相同的操作 您不需要导入两次,只需在创建连接或查询之前更新数据库名称即可
const express =
require('express');
const app = express();
const port = process.env.PORT || 80;
var http = require('http');
var mysql = require('mysql')
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',//here i am not passing db and db is undefined
});
app.get('/db1',function(req,res)
{
connection.config.database="task" //here i updating db name before query
connection.query('SELECT * FROM tasks', function (error, results, fields) {
console.log(results)
res.json(fields)
connection.end()
})
})
app.get('/db2',function(req,res)
{
connection.config.database="cg_taskview" //db2
connection.query('SELECT * FROM tasks', function (error, results, fields) {
if (error)
console.log(error);
console.log(results)
res.json(fields)
});
connection.end()
})
var server = http.createServer(app);
server.listen(port, function () {
})
下面是我的测试代码:
var sql = require('mssql/msnodesqlv8');
const config = {server:'localhost', database:'TestDB',
options: { trustedConnection: true }};
const config2 = {server:'SomewhereNotExist', database:'TestDB',
options: { trustedConnection: true }};
(async () => {
try {
let pool = await sql.connect(config);
let result = await pool.request().query('select count(1) as cnt from AlarmWithLastStatus');
console.log('DB1 result:');
console.dir(result.recordset);
let pool2 = await sql.connect(config2);
let result2 = await pool2.request().query('select count(1) as cnt from AlarmWithLastStatus');
console.log('DB2 result:');
console.dir(result2.recordset);
} catch (err) {
if (err) console.log(err);
}
}) ();
输出:
DB1结果:[{cnt:12}]
DB2结果:[{cnt:12}]
您可以看到这两个连接实际上指向同一台服务器。
如果将第二个查询更改为此服务器中不存在的表,则将生成您得到的错误。当将第二个MSSQL服务器作为数据源添加到项目中时,我开始遇到类似问题。。。幸运的是,我在冗长的JS示例中找到了一个解决方案。 只需使用ConnectionPool,不要忘记关闭连接:
const settings = require('./config');
const sql = require('mssql');
exports.someSqlQuery = async function(sqlQuery) {
const cPool = new sql.ConnectionPool(config);
cPool.on('error', err => console.log('---> SQL Error: ', err));
try {
await cPool.connect();
let result = await cPool.request().query(sqlQuery);
return {data: result};
} catch (err) {
return {error: err};
} finally {
cPool.close(); // <-- closing connection in the end it's a key
}
};
const settings=require('./config');
const sql=require('mssql');
exports.someSqlQuery=异步函数(sqlQuery){
constcpool=newsql.ConnectionPool(配置);
cPool.on('error',err=>console.log('-->sqlerror:',err));
试一试{
等待cPool.connect();
让result=wait cPool.request().query(sqlQuery);
返回{data:result};
}抓住(错误){
返回{error:err};
}最后{
cPool.close();//您正在同一台服务器上进行查询!我需要同时在不同的服务器上进行查询。我需要保持连接处于打开状态!使用end()关闭连接这将确保在向mysql服务器发送退出数据包之前执行所有剩余的查询。欢迎使用SO!这是一个注释,而不是一个答案。请将其编辑为一个回复,或者等待赢得一些评论代表。一些人会投票否决您的回复。当我尝试上述代码时,我能够连接到第一个服务器,而无需任何其他操作问题。但当我尝试连接到第二台服务器时,我发现全局连接已经存在。如果需要更改从node js连接到多个sql server的内容,请告诉我。
const settings = require('./config');
const sql = require('mssql');
exports.someSqlQuery = async function(sqlQuery) {
const cPool = new sql.ConnectionPool(config);
cPool.on('error', err => console.log('---> SQL Error: ', err));
try {
await cPool.connect();
let result = await cPool.request().query(sqlQuery);
return {data: result};
} catch (err) {
return {error: err};
} finally {
cPool.close(); // <-- closing connection in the end it's a key
}
};