2013-08-28 2 views
1

В настоящее время я работаю над сервером Node.js. Этот сервер использует Edge.js для выполнения моего кода рабочего процесса C# (это dll).Передача соединения SQL Server вокруг (node ​​to C#)

Мы используем специальную записываемую DLL, которая регистрируется в таблице SQL Server. Node.js и моя DLL рабочего процесса используют эту DLL регистрации, чтобы протоколировать шаги в базу данных SQL. В идеале просто нужно сразу открыть соединение с базой данных SQL, а затем повторно использовать его для кода Node и Edge/C#.

Есть ли способ открыть соединение в коде Node.js, а затем передать этот дескриптор соединения в Edge/C#. Или есть лучший способ сделать это?

На данный момент я просто открываю соединение, когда я вызываю dll dll рабочего процесса C#, а затем закрываю его в конце. Выполнение этого в узле вызывает некоторые проблемы (предполагая из-за асинхронного кода) «System.InvalidOperationException: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения открыто.».

ответ

1

Неплохая идея передать SqlConnections. отчасти потому, что они являются относительно дорогим ресурсом, и у вас может быть ограниченное количество из них. Базовые драйверы базы данных будут автоматически кэшировать SqlConnections для вас (AFAIK использует строку подключения в качестве ключа для кеша, поэтому всегда используйте одну и ту же строку соединения для одного и того же источника данных).

Вы должны также использовать инструкцию using, чтобы обеспечить своевременную доставку SqlConnections, когда они вам больше не нужны. Например, обернуть вызов ExecuteNonQuery с помощью заявления, которое создает/открывает SqlConnection:

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(); 
    } 
} 
+0

Спасибо, это то, что я хотел бы знать. –

+0

Да, конечно, отредактировано, чтобы добавить Открытый вызов. – Polyfun