ODAC 12.1

时间:2016-09-05 07:37:03

标签: asp.net vb.net oracle odac

上周我正在审查一个ASP.NET Visual Basic WebSite-Project,发现下面的代码片段(对我来说)非常奇怪。

Using Connection As New OracleConnection(ConnMain)
Connection.Open()

Dim Command As OracleCommand = Connection.CreateCommand()
Dim Transaction As OracleTransaction
Dim Reader As OracleDataReader

Dim Sql As New StringBuilder

Transaction = Connection.BeginTransaction()
Command.Transaction = Transaction
Try
        Sql.Length = 0
        Sql.Append("  INSERT INTO DEMOTABLE (VALID,  ")
        Sql.Append("                          DB_NR,  ")
        Sql.Append("                          CREATED_DATE,  ")
        Sql.Append("                          CREATED_BY) ")
        Sql.Append("      VALUES ('Yes', ")
        Sql.Append("              :DB_NR_P,  ")
        Sql.Append("              SYSDATE,  ")
        Sql.Append("              :CREATED_BY_P)  ")
        Sql.Append("   RETURNING DEMOTABLE_ID  ")
        Sql.Append("        INTO :DEMOTABLE_ID_P ")

        Command.CommandText = Convert.ToString(Sql)
        Command.Parameters.Clear()

        Command.Parameters.AddWithValue("DB_NR_P", ddlFirm.SelectedValue)
        Command.Parameters.AddWithValue("CREATED_BY_P", UserId)

        Dim DlcKombParam As OracleParameter = Command.Parameters.AddWithValue("DEMOTABLE_ID_P", "")
        DlcKombParam.Direction = ParameterDirection.Output
        DlcKombParam.Size = 255

        Command.ExecuteNonQuery()
        'handling the output-parameter
        Transaction.Commit()
Catch Ex As Exception
    Transaction.Rollback()
    WriteLog(Convert.ToString(Ex))
End Try
End Using

混淆是输出参数。编程这件作品的人使用与我相同的设置,唯一的区别是,他正在使用ODAC 11.2而我的机器已经在12.1上。 (.Net 3.5,Oracle-DB 12.1,System.Data.OracleClient)。在具有ODAC 11.2的所有计算机上(在三个不同的计算机上测试),该参数包含新插入行的ID。在我的机器上,参数仅包含五位ID的前两位数字。 更改参数(见下文)后,两个ODAC版本都正确返回了ID。

Dim DlcKombParam As New OracleParameter
DlcKombParam.ParameterName = "WEK_DLCKOMB_ID_P"
DlcKombParam.Direction = ParameterDirection.Output
DlcKombParam.OracleType = OracleType.Number

我的问题是:为什么新的ODAC版本只返回ID的前两位数字?我会理解它是否返回了错误(因为原始代码中的参数被添加为字符串,这可能在新版本中被归类为错误),或者甚至可能是空字符串。 但我无法理解为什么它只会返回部分价值......任何人都有任何想法?

0 个答案:

没有答案