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

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

我们正在使用一个自定义的书面日志loggingDLL日志到SQL Server表。 Node.js和我的工作streamdll使用这个日志dlllogging到SQL数据库的步骤。 理想情况下,只需要打开与SQL数据库的连接一次,然后将其用于Node和Edge / c#代码。

有没有办法在Node.js代码中打开连接,然后将连接句柄传递给Edge / C#。 还是有更好的方法来做到这一点?

目前,我只是打开连接,当我打电话给我的C#工作streamDLL,然后在最后closures它。 在Node中这样做会导致一些问题(假设由于asynchronous代码)“System.InvalidOperationException:ExecuteNonQuery需要一个开放的可用Connection,连接的当前状态是打开的。”

传递SqlConnections是一个坏主意。 部分原因是因为它们是一个相对昂贵的资源,可能只有有限的资源。 底层的数据库驱动程序会自动为你cachingSqlConnections(AFAIK使用连接string作为caching的关键字,所以总是对同一个数据源使用相同的连接string)。

你也应该使用using语句来确保在你不再需要的时候及时处理SqlConnections。 例如,使用创build/打开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(); } }