У меня есть программа vb.net, которую я преобразовываю из компиляции в VS2005 в VS2008, а также перехожу для запуска на другом сервере.
Это работает: 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
Проблема в том, что программа ничего не пишет, но также нене возвращает никаких ошибок.Он утверждает, что работает нормально.Следующий код не предоставляет никаких ошибок при запуске.
Этот код устанавливает информацию о соединении (и я только что заметил, что здесь НЕ делается перехват попытки)
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 ниже.Он напечатал в журнале записи, которые я хотел бы вставить, если бы я только мог выяснить проблему.
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 into user.table (" & _
"FieldName1, " & _
"FieldName2, " & _
"FieldName3) VALUES (" & _
Value1 & ", " & _
Value2 & ", " & _
Value3 & ")"
Есть какие-нибудь идеи относительно того, в каком направлении смотреть, что попробовать?
РЕДАКТИРОВАТЬ : я скомпилировал как x86 и x64 (это 64-битный сервер).Я запросил возвращаемое значение в oCMD.ExecuteNonQuery, и он возвращает 1, поскольку притворяется, что пишет 1 запись.Я перепутал строку подключения и перепробовал разные варианты.Иногда это терпит неудачу, но когда это действительно работает, это все еще терпит неудачу молча.Драйвер оракула на сервере является OraClient10g_64.