Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 节点表示多个SQL server连接_Sql Server_Node.js_Express_Database Connection - Fatal编程技术网

Sql server 节点表示多个SQL server连接

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

我需要连接到direfent服务器上的不同数据库。 服务器是Microsoft SQL Server

我是这样做的:

dbconfig.js

之后,两个连接都处于活动状态,但当我查询第一个连接时,它不起作用

错误是无效的对象名称“FooDatabase.dbo.fooTable”

有人能帮我解决这个问题吗


谢谢

我使用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
  }
};