2011-04-22 3 views
0

저는 VS2005에서 VS2008로 컴파일하는 vb.net 프로그램을 가지고 있으며, 다른 서버에서 실행하려고합니다.vb.net 프로그램은 오라클에 쓰지 않지만 오류는 없습니다.

작동 방식 : vb.net 2005, Oracle 10 드라이버가있는 서버에서 실행 중, Oracle 10g 데이터베이스에 쓰기.

vb.net 2008은 로컬 11 대의 드라이버가있는 로컬 Win7 머신에서 디버그를 실행하고 Oracle 10g 데이터베이스에 쓰면서 x86으로 컴파일되었습니다.

이 작동하지 않습니다 vb.net 2008 86로 컴파일, 오라클 10 또는 11 드라이버를 서버에서 실행, 오라클 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 

다음 코드는 데이터를 기록한다. 여기서 오류가 발생하지 않으며이 지점 이후에 로그가 성공적으로 기록되므로이 지점을 지나게됩니다.

EDIT : 아래의 ExecuteNonQuery 문 다음에 insert 명령의 기록에 인쇄를 추가했습니다. 문제를 파악할 수만 있다면 원하는 레코드를 삽입하여 로그에 기록 할 수 있습니다.

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 

내가 아직 확신 할 수없는 한 가지 (즉, 회신을 기다리고 있음)는 연결 문자열입니다. 내 데이터 원본이 내 PC에서 식별되는 것을 볼 수 없으며 서버에 정의되어 있는지 또는 어디에서 확인할 수 있는지 잘 모르겠습니다.

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 & ")" 

어떤 아이디어가 어떤 방향을 찾아 거기에 무엇을 시도 할 문자열입니다 : 내 연결 문자열은 다음과 같은 것이있다?

편집 : 저는 64 비트 서버 인 x86 및 x64로 컴파일했습니다. oCMD.ExecuteNonQuery에서 반환 값을 요청했으며 1 레코드를 쓰는 것처럼 가장하여 1을 반환합니다. 나는 연결 문자열을 망쳤으며 다양한 옵션을 시도했다. 때로는 실패하지만, 작동하면 조용히 실패합니다. 서버의 oracle 드라이버는 OraClient10g_64입니다.

+1

[예제 사용] (http://connectionstrings.com/oracle)을 사용하여 Oracle의 설치 방법에 따라 연결 문자열을 확인하십시오. 또한 직접 문자열을 값으로 주입하는 대신 SQL 매개 변수를 사용하여 조사해야합니다. 방향 삽입을 사용하는 한, 그 값 중 하나라도 문자열 (SQL에서 사용 된 따옴표 및 VB.NET에서 _ 사용하지 않는 따옴표) 인 경우 SQL 명령에서 따옴표가 빠져 있습니다. – pickypg

+1

데이터베이스에 연결하고 있다고 생각하는 연결 문자열을 확인하십시오. –

+0

@Bala R - 필자는 PC에서 동일한 연결 문자열을 사용했으며 데이터베이스에 쓰기를 수행 했으므로 서버에서 데이터 소스가 어떻게 정의되어 있는지 확인하고 있습니다. – thursdaysgeek

답변

0

@BalaR은 올바른 생각을 가지고 있습니다. 연결 문자열은 app.config에 정의되어 있으며 깨끗하게 다시 작성했습니다. 그러나 Settings.Designer.vb라는 내 프로젝트에 자동 생성 된 파일이 있으며 깨끗한 상태에서 다시 생성되지 않습니다. 다른 데이터베이스를 가리키는 연결 문자열이 있습니다.

내 컴퓨터에서 디버그 모드에서 또는 아닙니다, app.config에서 설정을 사용합니다. 서버에서 다른 연결 문자열을 사용하고 다른 데이터베이스에 쓰고있었습니다.

자동 생성 된 파일을 다시 생성해야합니다 (내 프로젝트를 두 번 클릭하고 설정 탭을 선택하면 다시 빌드됩니다). 그러면 app.config 파일과 일치합니다.

관련 문제