vb.net程序没有写入Oracle,但没有错误

时间:2011-04-22 20:01:22

标签: vb.net visual-studio-2008 oracle oracle10g drivers

我有一个vb.net程序,我正在从VS2005编译转换为VS2008,并且还要在不同的服务器上运行。

这有效: vb.net 2005,在带有Oracle 10驱动程序的服务器上运行,写入Oracle 10g数据库。

vb.net 2008编译为x86,在使用Oracle 11驱动程序的本地Win7计算机上运行调试,写入Oracle 10g数据库。

这不起作用: vb.net 2008编译为x86,在带有Oracle 10或11驱动程序的服务器上运行,写入Oracle 10g数据库

问题是程序没有写任何东西,但它也没有返回任何错误。它声称它工作正常。以下代码在运行时不会提供任何错误。

此代码设置连接信息(我刚注意到它没有try catch)

Private Sub SetConnectionToDB(ByRef oCMD As OracleCommand)
    Dim connectionString As String
    connectionString = My.Settings.ImportDataConnectionString
    Dim OraDBConnection As OracleConnection
    OraDBConnection = New OracleConnection(connectionString)

    oCMD.Connection = OraDBConnection
    oCMD.CommandType = CommandType.Text
End Sub

然后以下代码写入数据。这里没有发生错误,在此之后,日志成功写入,因此它确实超过了这一点。

编辑:我在下面的ExecuteNonQuery语句之后添加了一个print命令的日志。如果我只能找出问题,它会在日志中打印我希望插入的记录。

    Private Sub StoreDataInDB(ByVal insertCommand As String, ByRef oCMD As OracleCommand, ByRef logStream As StreamWriter)
    ' Connect to the Oracle database and send the insert statement
    Try
        oCMD.CommandText = insertCommand
        oCMD.Connection.Open()
        oCMD.ExecuteNonQuery()
    Catch ex As Exception
        'send error to a log
        'MsgBox(ex.Message())
        logStream.WriteLine("----------- Error occurred inserting data to Oracle -----------")
        logStream.WriteLine(insertCommand)
        logStream.WriteLine()
        logStream.WriteLine(ex.Message())
        logStream.WriteLine()
    Finally
        oCMD.Connection.Close()
    End Try
End Sub

我仍然不确定的一件事(我正在等待回复),是我的连接字符串。我没有看到我的数据源在我的电脑上被识别出来,我不确定它是在服务器上定义的,还是在哪里定义的。我的连接字符串如下所示:

connectionString="Data Source=OracleDB;User ID=UserIDHere;Password=PasswordHere;Unicode=True;Persist Security Info=True;"

Insert命令是格式为

的字符串
 "Insert into user.table (" & _
  "FieldName1, " & _
  "FieldName2, " & _
  "FieldName3) VALUES (" & _
   Value1 & ", " & _
   Value2 & ", " & _
   Value3 & ")"

对于要查看的方向,尝试的内容有什么想法吗?

编辑:我编译为x86和x64(它是64位服务器)。我已经要求在oCMD.ExecuteNonQuery上返回值,并且它假装写1条记录时返回1。我已经搞乱连接字符串并尝试了各种选项。有时它会失败,但是当它确实有效时,它仍会无声地失败。服务器上的oracle驱动程序是OraClient10g_64。

1 个答案:

答案 0 :(得分:0)

@BalaR有正确的想法 - 连接字符串在app.config中定义,我正在进行清理和重建。但是,My Project中有一个名为Settings.Designer.vb的自动生成的文件,并且不会在clean上重新生成。它有一个指向不同数据库的连接字符串。

在我的电脑上,无论是否处于调试模式,它都使用了app.config中的设置。在服务器上,它使用了另一个连接字符串,并且正在写入另一个数据库。

需要重新生成该自动生成的文件(双击My Project,选择Settings选项卡,它将自行重建),以便它与app.config文件匹配。