У меня есть следующий код, чтобы проверить, если база данных MSAccess 2003 открыта в монопольном режиме другим приложением (база данных уже есть пароль):Identifiying Исключения одного и того же типа OleDbException
OleDbConnectionStringBuilder conString = new OleDbConnectionStringBuilder();
conString.Provider = "Microsoft.Jet.OLEDB.4.0";
conString.DataSource = "some path to some mdb file";
// I don't care about the password,
// I just whant to know if it is opened in Exclusive Mode
conString["Jet OLEDB:Database Password"] = String.Empty;
conString["Mode"] = "Share Deny None";
string completeConnStr = conString.ConnectionString;
using (OleDbConnection con = new OleDbConnection(completeConnStr))
{
try
{
con.Open();
con.Close();
}
catch (Exception ex)
{
string s = ex.Message;
}
}
Когда база данных открыта в Exclusive Mode он не заботится о пароле, он генерирует исключение OleDbException со следующим сообщением: «Файл уже используется». Когда база данных не находится в эксклюзивном режиме и получает неверный пароль, она генерирует исключение OleDbException с сообщением: «Это не допустимый пароль».
Как определить эти два исключения? проверка пароля выполняется другим способом, поэтому я просто хочу знать, открыта ли база данных в эксклюзивном режиме, прежде чем раздражать пользователя диалоговым окном «Введите пароль».
Не используйте свойство 'Message' для исключения, чтобы сообщить вам, что означает это исключение. Это просто текст, читаемый человеком, и Microsoft получает возможность изменять текст или использовать одно и то же исключение с другим текстом. Спросите себя, например, что происходит с вашим кодом, если Microsoft исправляет опечатку в сообщении? –
Привет, Джон! Это именно то, чего я не хочу делать: использование свойства message. Должен быть другой способ идентифицировать эти исключения. –