SQL Server CE и потокобезопасные соединения я должен использовать блокировку ресурса? - PullRequest
0 голосов
/ 17 января 2012

Я реализовал базу данных SQL Server CE 4 в веб-сервис в C # .NET.

Я разделил соединение с базой данных между вызовами веб-сервисов, сделав объект подключения статическим (таким образом, разделяемым вызовами):

private static SqlCeConnection sqlConnection;

Чем я реализовал различные методы следующим образом:

lock (sqlConnection)
{
   SqlCeCommand cmd = sqlConnection.CreateCommand();
   tryOpenConnection();

   try
   {
      cmd.CommandText = "SELECT * FROM STAKEHOLDER";
      SqlCeDataReader rdr = cmd.ExecuteReader();

      while (rdr.Read())
      {
         String toAdd = "";
         toAdd = rdr.GetString(0) + "," + rdr.GetString(1);
         stakeholderList.Add(toAdd);
      }
   }
   catch (Exception e)
   {
      stakeholderList.Add("ERROR|" + e.Message);
   }

   sqlConnection.Close();
}

Вопрос:

Правильно ли блокировать SqlCeConnection для каждогопозвоните?

Спасибо

1 Ответ

1 голос
/ 03 апреля 2012

Это должно работать, но вы должны использовать другой объект для блокировки, а не объект подключения.Где-то в базовой иерархии он наследуется от MarshalByRefObject, что делает его объектом со слабой идентичностью.Для получения дополнительной информации проверьте

http://msdn.microsoft.com/en-us/library/ms182290(v=vs.100).aspx

...