2015-07-23 3 views
0

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

Когда я добираюсь до строки Dim msgTime As TimeSpan = reader.GetTimeSpan(2), я получаю исключение (см. Ниже).

Документационный Oracle утверждает, что INTERVAL DAY TO SECOND (который, как я хранить данные в БД) могут быть преобразованы в отрезок времени (см here)

Кто-нибудь знает, что вызывает это исключение, и как ее избежать ?

Спасибо.


Исключение:

Oracle.DataAccess.Types.OracleTypeException 
Provider type could not be represented as a .NET type 
    at Oracle.DataAccess.Types.TimeSpanConv.GetTimeSpan(OpoITLValCtx* pValCtx, OracleDbType oraType) 
    at Oracle.DataAccess.Client.OracleDataReader.GetTimeSpan(Int32 i) 
    at MyProgram.pollDatabase(Object sender, DoWorkEventArgs e) 

Запись в БД код:

Dim oCommand As New OracleCommand("INSERT INTO LOGTABLE(PK, MID,MDATE,MTIME,STATUS,SEVERITY,ORIGQ,MESSAGE) VALUES (:pk, :msgid, :msgdate, :msgtime, :status, :severity, :message)") 

oCommand.Parameters.Add("pk", OracleDbType.Varchar2, Guid.NewGuid().ToString().Substring(0, 12), ParameterDirection.Input) 
oCommand.Parameters.Add("msgid", OracleDbType.Varchar2, message.MessageID, ParameterDirection.Input) 
oCommand.Parameters.Add("msgdate", OracleDbType.Date, putDateSQL, ParameterDirection.Input) 
oCommand.Parameters.Add("msgtime", OracleDbType.IntervalDS, putTimeSQL, ParameterDirection.Input) 
oCommand.Parameters.Add("status", OracleDbType.Varchar2, "NEW", ParameterDirection.Input) 
oCommand.Parameters.Add("severity", OracleDbType.Varchar2, messageSeverity, ParameterDirection.Input) 
oCommand.Parameters.Add("message", OracleDbType.Clob, clob, ParameterDirection.Input) 

Чтение из БД Код:

Dim conn As OracleConnection = New OracleConnection(oradb) 
Dim oCommand As New OracleCommand("SELECT MID,MDATE,MTIME,STATUS,SEVERITY, ORIGQ, MESSAGE FROM LOGTABLE") 
oCommand.CommandType = CommandType.Text 
oCommand.Connection = conn 
oCommand.Connection.Open() 
Dim reader As Oracle.DataAccess.Client.OracleDataReader = oCommand.ExecuteReader() 

If reader.HasRows Then 

    While reader.Read() 
     Try 
      Dim messageID As String = reader.GetString(0) 
      Dim msgDate As Date = reader.GetDateTime(1) 
      If Not reader.IsDBNull(2) Then 
       Dim msgTime As TimeSpan = reader.GetTimeSpan(2) 
      End If 
      Dim msgStatus As String = reader.GetString(3) 
      Dim msgSeverity As String = reader.GetString(4) 
      Dim msgOrigin As String = reader.GetString(5) 
      Dim msgContent As String = reader.GetString(6) 
     Catch ex As Exception 
      Console.Out.WriteLineAsync(ex.Message) 
     End Try 
    End While 

End If 

ответ

0

мне нужно использовать Dim msgTimeInterval As Oracle.DataAccess.Types.OracleIntervalDS = reader.GetOracleIntervalDS(2)Dim msgTime As TimeSpan = reader.GetTimeSpan(2) вместо