2011-04-22 36 views
0

我有一個vb.net程序,我正在從VS2005編譯轉換到VS2008,也轉移到不同的服務器上運行。vb.net程序不寫入Oracle,但沒有錯誤

此作品: vb.net 2005,在帶有Oracle 10驅動程序的服務器上運行,寫入Oracle 10g數據庫。

vb.net 2008編譯爲x86,在我的本地Win7機器上使用Oracle 11驅動程序運行,寫入Oracle 10g數據庫。

這不起作用: vb.net 2008編譯爲X86,與Oracle 10或11個驅動器上的服務器上運行,寫入Oracle 10g數據庫

的問題是程序不寫什麼,但它也不會返回任何錯誤。它聲稱它工作正常。以下代碼在運行時不會提供任何錯誤。

此代碼設置的連接信息(我只注意到它不會在這裏有一個嘗試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

根據Oracle如何使用[這裏的示例](http://connectionstrings.com/oracle)來檢查連接字符串。您還應該考慮使用SQL參數,而不是直接注入字符串值。只要你使用方向注入,如果這些值中有任何值是字符串(SQL使用引號,VB.NET使用_not_),那麼你可能會在SQL命令中缺少引號。 – pickypg 2011-04-22 20:40:02

+1

通過連接字符串確認它正在與您認爲正在與之通話的數據庫進行通話。 – 2011-04-22 20:42:31

+0

@Bala R - 我在我的電腦上使用了相同的連接字符串,並且它寫入數據庫,這就是爲什麼我要檢查數據源是如何在服務器上定義的。 – thursdaysgeek 2011-04-22 21:00:34

回答

0

@BalaR有正確的想法 - 連接字符串在app.config中定義,我正在做一個乾淨的重建。但是,我的項目中有一個名爲Settings.Designer.vb的自動生成的文件,並且該文件不會在乾淨的環境中重新生成。它有一個連接字符串指向一個不同的數據庫。

在我的電腦上,在調試模式下,它使用了app.config中的設置。在服務器上,它使用另一個連接字符串,並寫入到不同的數據庫。

需要重新生成自動生成的文件(雙擊我的項目,選擇設置選項卡,它會重建自身),以便它匹配app.config文件。

相關問題