传递SQL Server连接(节点到c#)

本文关键字:节点 SQL Server 连接 传递 | 更新日期: 2023-09-27 18:29:13

我目前正在Node.js服务器上工作。这个服务器使用Edge.js来执行我的C#工作流代码(它是一个dll)。

我们正在使用一个自定义编写的日志dll,该dll将日志记录到SQL Server表中。Node.js和我的工作流dll使用此日志记录dll将步骤记录到SQL数据库中。理想情况下,它只需要打开一次与SQL数据库的连接,然后将其重新用于Node和Edge/c#代码。

是否有某种方法可以在Node.js代码中打开连接,然后将该连接句柄传递给Edge/C#。或者有更好的方法吗

目前我正在打开连接,这时我调用了我的c#Workflow dll,然后在最后关闭它。在Node中执行此操作会导致一些问题(假设是因为异步代码)"System.InvalidOperationException:ExecuteNonQuery需要一个打开且可用的连接。该连接的当前状态为打开。".

传递SQL Server连接(节点到c#)

传递SqlConnections不是一个好主意。部分原因是它们是一种相对昂贵的资源,而且你可能拥有的数量有限。底层数据库驱动程序将自动为您缓存SqlConnections(AFAIK使用连接字符串作为缓存的关键字,因此始终对同一数据源使用相同的连接字符串)。

您还应该使用using语句来确保在不再需要SqlConnections时及时处理它们。例如,使用创建/打开SqlConnection:的using语句包装对ExecuteNonQuery的调用

using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
    sqlConnection.Open();
    // Need to define cmdText.
    string cmdText = "";
    using (SqlCommand sqlCommand = new SqlCommand(cmdText, sqlConnection))
    {
        sqlCommand.CommandType = CommandType.Text;
        sqlConnection.Open();
        var result = sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();
    }
}