【问题标题】:Provider type could not be represented as a .NET type OracleTypeException提供程序类型无法表示为 .NET 类型 OracleTypeException
【发布时间】:2015-10-14 00:52:45
【问题描述】:

所以我有一个应用程序正在写入一个 oracle 数据库,然后另一个应用程序正在从同一个数据库中读取数据。

当我到达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

【问题讨论】:

    标签: sql database vb.net oracle data-access


    【解决方案1】:

    我需要使用Dim msgTimeInterval As Oracle.DataAccess.Types.OracleIntervalDS = reader.GetOracleIntervalDS(2) 而不是Dim msgTime As TimeSpan = reader.GetTimeSpan(2)

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多