首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到Oracle数据库时出错(ORA-12560)

连接到Oracle数据库时出错(ORA-12560)
EN

Stack Overflow用户
提问于 2015-03-12 00:05:38
回答 1查看 335关注 0票数 0

当我试图连接到我正在开发的VB.net应用程序中的数据库时,我遇到了标题中提到的错误。我知道这不是侦听器或任何服务问题,因为我能够在我开发的不同应用程序中使用相同的凭据连接到相同的数据库(我是在与正在开发的应用程序连接失败后运行该应用程序的,所以它不是Windows事件日志)。

两者都使用Oracle.DataAccess.Client.OracleConnection来引用现有的ODBC连接。

非功能代码:

代码语言:javascript
复制
Public Function EstablishCon(ByVal odbc As String, 
        ByVal uname As String, 
        ByVal pass As String) As Oracle.DataAccess.Client.OracleConnection
    '
    Dim constr As String
    Dim scon As Oracle.DataAccess.Client.OracleConnection = Nothing

    Try
        constr = "Data Source=" & odbc & ";User Id=" & uname & ";Password=" & pass & ";"
        scon = New Oracle.DataAccess.Client.OracleConnection(constr)
        scon.Open()
    Catch ex As Exception
        MsgBox("Encountered an error while creating the Oracle connection string and opening the connection. This will cause the application to be unable to access any data." _
            & " As such the application will close following the closure of this error message." & Chr(10) & Chr(10) & "Error Details: " & ex.Message, vbOKOnly, _
            "Critical Error: Failed to the Oracle Database")
        scon.ConnectionString = Nothing
    End Try

    Return scon
End Function

而我的工作代码看起来像这样:

代码语言:javascript
复制
Private Sub MainWin_Shown(sender As Object, e As EventArgs) Handles Me.Shown
    '
    'Dim scmd As New SqlClient.SqlCommand
    Dim QTxt As String = ""
    Dim ConStr As String = "Data Source=existing ODBC connection name;User Id=user_name;Password=pass;"
    Dim scon As New Oracle.DataAccess.Client.OracleConnection(ConStr)
    Dim d As New DataStore
    Dim scmd As New Oracle.DataAccess.Client.OracleCommand
    Dim odr As Oracle.DataAccess.Client.OracleDataReader

    'Setup the datatable in d
    Try
        d.DT.Columns.Add("App_Type")
        d.DT.Columns("App_Type").DataType = GetType(String)
        d.DT.Columns.Add("CPU_Seconds")
        d.DT.Columns("CPU_Seconds").DataType = GetType(Double)
        'd.DT.Columns.Add("Pct_Of_CPU")
        'd.DT.Columns("Pct_Of_CPU").DataType = GetType(Double)
        d.DT.Columns.Add("RunDate")
        d.DT.Columns("RunDate").DataType = GetType(Date)
    Catch ex As Exception
        Me.Errors.Text = "Encountered an error setting up the data table that will receive the query data. Details: " & ex.Message
        d = Nothing
        scon = Nothing
        scmd = Nothing
        ConStr = Nothing
        QTxt = Nothing
        odr = Nothing
        Exit Sub
    End Try


    Me.Status.Text = Now() & " - Building the SQL executor"
    Me.Refresh()
    'Build the query executor
    Try
        scmd.CommandType = CommandType.Text
        scmd.Connection = scon

        'Capture the query text
        QTxt = 'Some text that makes a valid query 

        scmd.CommandText = QTxt
    Catch ex As Exception
        Me.Errors.Text = "An error occurred while building the SQL Executor. Details: " & ex.Message & Chr(10) & Chr(10) & Me.Errors.Text
        d = Nothing
        scon = Nothing
        scmd = Nothing
        ConStr = Nothing
        QTxt = Nothing
        odr = Nothing
        Exit Sub
    End Try

    Me.ProgBar.Step = 5
    Me.ProgBar.PerformStep()
    Me.Status.Text = Now() & " - Connecting to the database" & Chr(10) & Me.Status.Text
    Me.Refresh()
    Try
        'Open the connection
        scon.Open()
    Catch ex As Exception
        Me.Errors.Text = "An error occurred while opening the SQL connection. Details: " & ex.Message & Chr(10) & Chr(10) & Me.Errors.Text
        d = Nothing
        scon.Close()
        scon = Nothing
        scmd = Nothing
        ConStr = Nothing
        QTxt = Nothing
        odr = Nothing
        Exit Sub
    End Try

   'Some more stuff that's not relevant
End Sub

对于混乱的格式,我很抱歉,我花了15分钟试图将两个代码块分开,但StackOverflow就是无法做到这一点。

因此,两者之间唯一的真正区别是,一个在声明连接变量时填充连接字符串,另一个稍后在单独的函数中执行此操作。当在函数内部抛出并捕获错误时,函数方面似乎没有考虑到这一点。我

EN

回答 1

Stack Overflow用户

发布于 2015-03-12 01:13:43

所以问题是我是如何调用调用该函数的表单的。我用的是.Show而不是.ShowDialog

这导致表单变量(保存作为odbcunamepass传入的值)在触发Shown事件(调用连接函数的位置)之前被清除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28991642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档