Exception.Data населения ошибка? - PullRequest
0 голосов
/ 16 марта 2010

Вот соответствующая часть моего кода:

    adapter.Fill(table);

    return;
}
catch(Exception ex)
{
    SqlException sqlEx = ex as SqlException;

У меня есть исключение, которое выдается адаптером.Fill (), и когда я помещаю точку останова в первую строку в обработчике исключений, свойство Exception.Data уже содержит ключ, уникальный для моего приложения.

Дело в том, что это происходит не каждый раз, а только тогда, когда это исключение выдается в течение ~ 2 секунд после его последнего выброса.

Объясните, что !!

Ответы [ 2 ]

0 голосов
/ 16 мая 2011

На этой странице есть комментарий, который звучит так, как будто он относится к тому, что вы видите.

Пользователь (TWheelhouse) сказал:

На поверхности кажется, что как-то некоторые функции .NET Framework пытаются повторно использовать экземпляры исключения, вызывая флаги, добавленные в «Данные» коллекция должна быть установлена когда они действительно просто висят вокруг с предыдущего раза, когда Исключение было брошено и флаг добавлено ...

public static void foo(string connectionString) {
  try {
    SqlConnection cn = new SqlConnection (connectionString);
    cn.Open();
  }
  catch (SqlException ex) {
    if (ex.Data.Contains("MY_TEST_FLAG"))
      Debug.WriteLine("BAD! It Shouldn't be there yet!");
    else
      Debug.WriteLine("Fine.");

    ex.Data.Add("MY_TEST_FLAG", true);
  }
}

Вызовите foo () несколько раз с Строка подключения, которая vaild в формат, но, возможно, с плохим UID значение. Первый раз, когда вы звоните FOO, я получить «отлично». сообщение, когда плохо Строка подключения вызывает Объект подключения, чтобы бросить SqlException, но каждый раз после что я получаю "ПЛОХО!" сообщение (для в то время как в итоге я получу "отлично" сообщение снова, один раз, потом еще "ПЛОХО!" сообщения).

Если каждый раз я пытаюсь создать SqlConnection с плохим соединением строка действительно приводит к совершенно уникальные случаи SqlException, чтобы быть брошенным, я бы получил «Прекрасное» сообщение каждый раз!

Я не тиражировал эту проблему сам и не пытался запустить приведенный выше код, но казалось, что это может быть связано с вашей проблемой.

0 голосов
/ 17 марта 2010

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

Если вы используете встроенную защиту, возможно, что пользователь не добавлен в систему безопасности SQL Server или у пользователя нет доступа к базе данных. В SQl Server безопасность - это двухэтапный процесс: сначала добавьте пользователя на SQL Server в качестве действительного имени входа, а затем предоставьте пользователю доступ к базе данных.

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