识别相同 OleDbException 类型的异常

2024-01-04

我有以下代码来验证另一个应用程序是否以独占模式打开 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 并显示一条消息:“这不是有效的密码”。

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


The OleDbException类提供了Errors财产实际上是一个OleDbErrorCollection。该合集包含OleDbError提供有关错误信息的对象。

你可以使用SQLState的财产OleDbError类来区分这两种情况:

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 http://msdn.microsoft.com/en-us/library/office/bb221208%28v=office.12%29.aspx有关可能的错误的更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

识别相同 OleDbException 类型的异常 的相关文章

随机推荐

  • 如何制作一个收集到 com.google.common.collect.ImmutableSet 的 java.util.stream.Collector?

    这对我来说似乎太棘手了 因为ImmutableSet实例仅使用以下内容构建ImmutableSet Builder实例 未实现Collection所以你不能只使用Collectors toCollection ImmutableSet ne
  • Vaadin 10/11 和嵌入式 Jetty

    我在 Vaadin 8 5 1 上开发了中型应用程序 Jetty 嵌入式 9 4 8 用作 Vaadin servlet 的 Servlet 容器 在 Java 代码中 我初始化 Jetty 实例 创建 Vaadin servlet 并将其
  • 多个 Web 服务的集中身份验证和授权

    有几种不同的 Web 服务 使用的各种技术 例如 Java NET Python Perl 以及将来可能会使用的更多技术 属于不同的组织 并且必须限制对这些 Web 服务的访问 这个想法是拥有一个中央身份验证和授权服务器 只负责授予对每个
  • 为什么要预测一个分支,而不是简单地并行执行两个分支?

    我相信 在创建 CPU 时 如果选择了错误的分支 分支预测会导致速度显着下降 那么 为什么 CPU 设计者选择一个分支 而不是简单地执行两个分支 然后在确定选择了哪个分支后就切断其中一个分支呢 我意识到这只能在少量指令内深入 2 或 3 个
  • 如何避免多个嵌套 IF

    我目前正在尝试重组我的程序 使其更加面向对象并更好地实现已知模式等 我有很多嵌套的 IF 语句 想去掉它们 我该怎么办 我的第一个方法是在有例外的情况下完成它 所以例如 public static Boolean MyMethod Stri
  • Pythonlogging.getLogger 在 AWS Glue python shell 作业中不起作用

    我正在尝试使用 Python 为我的 AWS Glue 作业设置一个记录器logging模块 我有一个使用 Python 版本 3 的类型为 Python Shell 的 Glue 作业 如果我实例化记录器而没有任何记录 则记录工作正常na
  • Android EditText 原生选择器

    我尝试将自己的设计应用于 edittext 并在启用 聚焦等情况下使用 android 本机选择器 问题是 每次我触摸 edittext 并且本机选择器正在工作时 我的 edittext 都会变小 任何人都可以建议为什么会发生这种情况吗 这
  • Ops 代表什么?

    在 Scala 社区中 我经常看到课程以Ops很常见 例如 ApplicativeErrorIdOps 什么是Ops代表 Ops 运营 这不仅在 Scala 中而且在一般情况下都是非常常用的快捷方式 在 Cats 中 它被用作扩展方法类的后
  • 如何通过此代码使用 jquery 更改 css 属性

    business 当前设置为背景 323232 我怎样才能将其更改为 000 当我点击 business 并在菜单关闭后返回到 323232 后 document ready function business click function
  • JSF 2 动态表单和 Bean 验证 JSR 303

    我从带注释的 bean 开始生成一个动态表单 使用 Hibernate Validator 对同一个 bean 进行注释以进行验证 表单已正确呈现 但提交表单时 验证步骤并未执行 如果我使用 jsf 标记编写相同的表单 则验证可以正常工作
  • setBackground() 或 setFontColor 在 GAS 中不起作用

    我在让我的脚本突出显示一个范围时遇到了麻烦 经过一番调试后 我意识到 type 的调用似乎有问题 range setBackground name of color 因此 我访问了 GAS 参考网站并使用了他们页面上的示例 https de
  • 为什么在 JavaScript 中使用链式原型继承?

    perf http jsperf com object inheritance vs object composition 为什么我们要构建原型继承链而不是使用对象组合 查找链中每一步的原型都非常昂贵 这是一些虚拟示例代码 var lowe
  • 使用 find 查找不属于 USER 或 GROUP 的文件

    我需要在 CentOS 7 中查找不属于用户或不属于组的文件和文件夹 我有3个测试目录 root root test1 root group test2 user root test3 我需要能够找到所有 3 个目录 这样我就可以在一个 f
  • R Write.CSV 错误:无法打开文件,参数无效

    这似乎是一个非常简单的问题 但我在其他地方找不到答案 所以我希望这里有人能给我指出正确的方向 我正在使用 R 脚本编写 CSV 并遇到以下错误 Error in file file ifelse append a w cannot open
  • pygame.mixer.Sound.play 尽管定期触发,但不规则

    我目前尝试每 x 毫秒重复一次声音 其中 x 取决于我通过套接字收到的 UDP 数据包 我决定使用 pygame 来实现这一点 我用这个答案每 x 毫秒重复一次 https stackoverflow com a 18954902 3475
  • CC.Net 中修改Reader 任务的示例?

    我正在尝试建立一个构建链 通过各个构建阶段传播修改历史记录 我的第一个想法是修改写入器 修改读取器对 但我无法让读者读取结果 有人有任何例子或提示吗 我使用的是最新的CC NET 1 4 4 SP1 谢谢 玩了一会就明白了 请注意 您需要最
  • 在 gdb 会话中选择调试信息文件的子集

    在我的 Fedora 盒子上我安装了很多单独的调试信息 sudo dnf debuginfo 安装
  • 用Java向多个收件人发送邮件

    我想使用以下方法向多个收件人发送消息 message addRecipient Message RecipientType TO String arg1 Or message setRecipients Message RecipientT
  • 对于 Windows 窗体来说,PostMessage to self 相当于什么?

    我正在编写一个源自的自定义控件System Windows Forms Control 该控件正在使用Control KeyDown事件 观察击键 我应该处理一些击键 例如
  • 识别相同 OleDbException 类型的异常

    我有以下代码来验证另一个应用程序是否以独占模式打开 MSAccess 2003 数据库 数据库已有密码 OleDbConnectionStringBuilder conString new OleDbConnectionStringBuil