1

我目前正在使用 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 需要一个打开且可用的连接。连接的当前状态是打开的。”。

4

1 回答 1

1

传递 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();
    }
}
于 2013-08-28T10:05:48.653 回答