gpt4 book ai didi

c# - 识别相同 OleDbException 类型的异常

转载 作者:行者123 更新时间:2023-11-30 14:33:39 32 4
gpt4 key购买 nike

我有以下代码来验证 MSAccess 2003 数据库是否被另一个应用程序以独占模式打开(数据库已经有密码):

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;
}
}

当数据库以独占模式打开时,它不关心密码,它会抛出一个 OleDbException 并显示以下消息:“文件已在使用中”。当数据库未处于独占模式并收到错误的密码时,它会抛出 OleDbException 并显示一条消息:“这不是有效的密码”。

如何识别这两个异常?密码验证是用另一种方法进行的,所以我只想知道数据库是否以独占模式打开,然后再用“请输入密码”对话框烦扰用户。

最佳答案

OleDbException 类提供了 Errors 属性,它实际上是一个 OleDbErrorCollection。此集合包含提供有关错误信息的 OleDbError 对象。

您可以使用 OleDbError 类的 SQLState 属性来区分这两种情况:

try
{
con.Open();
con.Close();
}
catch (OleDbException dbException)
{
switch (dbException.Errors[0].SQLState)
{
case "3031": // Authentication failed...
MessageBox.Show("Authentication failed...");
break;
case "3045": // File already in use...
MessageBox.Show("Database already in use...");
break;
default:
break;
}
}

请看这个link有关可能的错误的更多信息。

关于c# - 识别相同 OleDbException 类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15952936/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com