C #, SQL Server 2005 и пропущенный сеанс - PullRequest
0 голосов
/ 18 ноября 2011

У меня проблема с клиентом. У меня есть этот код:

var conn = new SqlConnection(Util.GetConnectionString());
var DataCommand = new SqlCommand();
var sql = "";

// subseccion
try
{
   sql = "TRUNCATE TABLE preview_" + tablename;
   DataCommand = new SqlCommand(sql, conn);
   DataCommand.Connection.Open();
   int numcol = DataCommand.ExecuteNonQuery();
   sql = "insert into  preview_" + tablename+ " select * from " + tablename;
   DataCommand = new SqlCommand(sql, conn);
   DataCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
   var latest_error = ex.Message;
   Util.Add_Event_Log(latest_error);
}
finally
{
   DataCommand.Dispose();
   if (conn.State == ConnectionState.Open)
   {
      conn.Close();
   }
   conn.Dispose();
}

Это делается следующим образом: я даю имя таблицы, она TRUNCATE таблицы, затем копирует информацию из "таблицы" в "preview_table", и она работает как положено.

Однако мы обнаружили, что если мы не дадим разрешение TRUNCATE для этой таблицы, то произойдет сбой. Но моя проблема в том, что он не только завершается ошибкой, но и удаляет текущий сеанс (и может также перезапустить процесс сервера) .

Могу поспорить, что это проблема с сервером (server 2003), возможно, она не исправлена ​​или что-то еще, потому что я работаю внутри части try-catch, поэтому она не должна завершаться таким образом.

Мои клиенты говорят, что проблема в коде.

Но я не уверен, может быть, мне не следует использовать команду sql в цепочке.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2011

Если выясняется, что использование TRUNCATE является виновником, вы можете попробовать поменять его в пользу использования оператора DELETE. Производительность не будет такой высокой, но вам также не потребуются повышенные пользовательские разрешения в SQL Server.

0 голосов
/ 18 ноября 2011

Это происходит как в среде разработки, так и в производственной среде?Если это так, вам нужно пройтись по коду с помощью отладчика VS и точно указать линию, в которой удаляется сеанс.

Вам также следует проверить журналы событий на рабочем сервере, чтобы убедиться, что они могут предоставитьлюбая информация.

Как указано в комментариях msergey, это может быть Util.Add_Event_Log, вызывающее исключение, но вы должны проверить это, пройдя по коду.

Если это Util.Add_Event_Logвызывая проблему, переместите этот код из catch в его собственный оператор try / catch, объявив переменную исключения во внешней области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...