Программа vb.net не пишет в Oracle, но ошибок нет - PullRequest
0 голосов
/ 23 апреля 2011

У меня есть программа 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.

1 Ответ

0 голосов
/ 28 апреля 2011

@ BalaR имел правильную идею - строка подключения определена в app.config, и я делал чистку и перестройку. Однако в My Project есть автоматически созданный файл с именем Settings.Designer.vb, который не регенерируется в чистом виде. У него была строка подключения, указывающая на другую базу данных.

На моем компьютере, в режиме отладки или нет, он использовал настройки из app.config. На сервере он использовал другую строку подключения и выполнял запись в другую базу данных.

Этот автоматически созданный файл необходимо восстановить (дважды щелкните Мой проект, выберите вкладку Настройки, и он будет перестроен сам), чтобы он соответствовал файлу app.config.

...