图 2: 使用 New Project 对话框 您将需要为工程(我们使用 OtnWinApp)和解决方案(我们使用 OtnSamples)指定有意义的名称。 一个解决方案包含一个或多个工程。 当一个解决方案仅包含一个工程时,许多人对二者使用相同的名称。 添加引用 因为我们的工程必须与 Oracle 数据库连接,因此必须添加一个到包含我们选择的数据供给程序的 dll 的引用。 在 Solution EXPlorer 内,选择 References 节点,右键单击并选择 Add Reference。 或者,您可以转至菜单栏并选择 Project,然后选择 Add Reference。
图 4: 选择 ODP.NET 治理的数据供给程序 从列表中选择 Oracle.Dataaccess.dll,然后单击 Select 按钮,最后单击 OK 按钮,使您的工程能够找到 ODP.NET 数据供给程序。
图 5: 选择 Oracle Managed Provider 之后的解决方案浏览器 VB.NET/C# 语句 在添加引用之后,标准的做法是要添加 VB.NET Imports 语句、C# using 语句或 J# import 语句。 从技术上说这些语句不是必要的,但是使用它们可以让您不需用冗长且完整名称来引用数据库对象。
图 6: 捕捉到一个 ORA-12545 错误,并向用户显示。 Oracle DBA 或开发人员很清楚 ORA-12545 的意义,但是最终用户不清楚。 一种更好的解决方案是添加一条额外的 Catch 语句来捕捉最常见的数据库错误并显示对用户友好的消息。 OracleException class does not have a Number property in VB.NET.) -->Catch ex As OracleException ' catches only Oracle errors If InStr(1, ex.Message.ToString(), "ORA-1:", CompareMethod.Text) Then MessageBox.Show("Error attempting to insert duplicate data.") ElseIf InStr(1, ex.Message.ToString(), "ORA-12545:", CompareMethod.Text) Then MessageBox.Show("The database is unavailable.") Else MessageBox.Show("Database error: " + ex.Message.ToString()) End IfCatch ex As Exception ' catches any error MessageBox.Show(ex.Message.ToString())catch (OracleException ex) // catches only Oracle errors{ switch (ex.Number) {case 1: MessageBox.Show("Error attempting to insert duplicate data."); break; case 12545: MessageBox.Show("The database is unavailable."); break; default: MessageBox.Show("Database error:" + ex.Message.ToString()); break; }}catch (Exception ex) // catches any error{ MessageBox.Show(ex.Message.ToString());}注重上面的代码示例中的两条 Catch 语句。 假如没有捕捉到任何 Oracle 错误,那么将跳过第一条 Catch 语句分支,让第二条 Catch 语句来捕捉其他任何类型的错误。 在代码中,应该根据从非凡到一般的顺序对 Catch 语句排序。 在实施了对用户友好的异常处理代码之后,ORA-12545 错误消息显示如下:
图 7: 针对 ORA-12545 错误的对用户友好的消息 Finally 代码将始终执行,而无论错误是否发生。 通过在 Finally 代码块中加入连接对象的 Close 或 Dispose 方法调用,在执行了 Try-Catch-Finally 代码段之后,数据库连接将始终关闭。 试图关闭没有打开的数据库连接不会导致错误。 例如,假如数据库不可用,数据库连接没有打开,那么 Finally 代码块将试图关闭不存在的连接。 执行多余的 Close 或 Dispose 是无效的。 只需将一条 Close 或 Dispose 方法放到 Finally 代码块中,将保证关闭连接。 利用 DataReader 检索多个值
图 8: 在上机操作 1 中包含按钮和标签控件的表单
图 9: 单击事件处理程序 stub。
图 10: 成功检索到数据
图 11: 包含按钮和标签控件的表单(上机操作 2 )
图 12: 一个未处理的异常
图 13: 添加了 ListBox 的表单 新闻热点
疑难解答