科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在Oracle数据库上构建.NET应用程序

在Oracle数据库上构建.NET应用程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程。

作者:John Paul Cook 来源:Oracle中国 2007年10月22日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共5页)

错误处理

  Try-Catch-Finally 结构的错误处理是 .NET 语言的一部分。 下面是使用 Try-Catch-Finally 语法的一个相对最小的例子:
Dim conn As New OracleConnection(oradb) ' VB.NET 
Try 
    conn.Open() 

    Dim cmd As New OracleCommand 
    cmd.Connection = conn 
    cmd.CommandText = "select dname from dept where deptno = " + TextBox1.Text 
cmd.CommandType = CommandType.Text 

    If dr.Read() Then 
        Label1.Text = dr.Item("dname") ' or use dr.Item(0) 
    End If 
Catch ex As Exception ' catches any error 
    MessageBox.Show(ex.Message.ToString()) 
Finally 
    conn.Dispose() 
End Try 

OracleConnection conn = new OracleConnection(oradb); // C# 
try 
{ 
conn.Open(); 

OracleCommand cmd = new OracleCommand(); 
    cmd.Connection = conn; 
    cmd.CommandText = "select dname from dept where deptno = " + textBox1.Text; 
cmd.CommandType = CommandType.Text; 

    if (dr.Read()) // C# 
    { 
        label1.Text = dr.GetString(0); 
    } 
} 
catch (Exception ex) // catches any error 
{ 
    MessageBox.Show(ex.Message.ToString()); 
} 
finally 
{ 
    conn.Dispose(); 
} 
  虽然这种方法将适当地捕获尝试从数据库中获取数据时发生的任何错误,但这种方法对用户却不友好。 例如,看看下面这条在数据库不可用时显示的消息。

图 6
图 6: 捕获到一个 ORA-12545 错误,并向用户显示。

  Oracle DBA 或开发人员很清楚 ORA-12545 的意义,但是最终用户不清楚。 一种更好的解决方案是添加一条额外的 Catch 语句来捕获最常见的数据库错误并显示对用户友好的消息。
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 If 
Catch 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
图 7: 针对 ORA-12545 错误的对用户友好的消息

  Finally 代码将始终执行,而无论错误是否发生。 通过在 Finally 代码块中加入连接对象的 Close 或 Dispose 方法调用,在执行了 Try-Catch-Finally 代码段之后,数据库连接将始终关闭。 试图关闭没有打开的数据库连接不会导致错误。 例如,如果数据库不可用,数据库连接没有打开,那么 Finally 代码块将试图关闭不存在的连接。 执行多余的 Close 或 Dispose 是无效的。 只需将一条 Close 或 Dispose 方法放到 Finally 代码块中,将保证关闭连接。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章