Таким образом, у меня есть приложение, которое записывает в базу данных оракула, а затем другую, которая считывает данные из одной базы данных.Тип провайдера не может быть представлен как .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