首页 > 解决方案 > 从 vb.net 更新 oracle 中的序列

问题描述

我尝试增加表中的字段......但我有一个错误。

Public Function GetConnexion() As OracleConnection
    Dim str = New OracleConnectionStringBuilder With {
           .Password = ConfigurationManager.AppSettings(ORACLE_MDP_PDM).ToString,
           .UserID = ConfigurationManager.AppSettings(ORACLE_USER_PDM).ToString,
           .DataSource = ConfigurationManager.AppSettings(ORACLE_DTSRC_PDM).ToString
       }
    Return New OracleConnection With {.ConnectionString = str.ConnectionString}
End Function

Private sub getIdObject() As Double
    Dim con As OracleConnection = GetConnexion()
    con.Open()
    Dim cmd As New OracleCommand With {.Connection = con}
    cmd.CommandType = CommandType.Text
    cmd.CommandText = "UPDATE COUNTER SET VALUE=VALUE+1 where REFERENCE='ID_OBJECT';"
    cmd.ExecuteNonQuery()
    cmd.Dispose()
End Sub

和错误:

消息:ORA-00911:caractère 无效异常:Oracle.ManagedDataAccess.Client.OracleException(0x80004005):ORA-00911:caractère 无效à OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId,Boolean bThrowArrayBindRelatedErrors,SqlStatementType sqlStatementType,Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) à OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent , 甲骨文异常&exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, Boolean isFromEF) à Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery() à Cotix.getIdObject() dans XXXX.vb:ligne 60 à Cotix.InsertMapping(List`1 GeneralDatas) dans XXXX.vb :ligne 77 à Cotix._Default.Defrag(MonFormEditPhoto MesDonnees) dans XXXX.vb:ligne 36

当我在 oracleDeveloper 工具中复制/粘贴时......它的工作......当我尝试选择

Private Sub _Default_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim con As OracleConnection = GetConnexion()
    con.Open()
    Dim cmd As New OracleCommand With {.Connection = con}
    cmd.Parameters.Add(New OracleParameter With {.OracleDbType = OracleDbType.Varchar2, .Value = "ID_OBJECT"})
    cmd.CommandType = CommandType.Text
    cmd.CommandText = "SELECT VALUE  FROM COUNTER where REFERENCE = :1"
    Dim dr As OracleDataReader = cmd.ExecuteReader()
    dr.Read()
    HelperJournal.WriteEntry("NewIdObject", dr.Item("VALUE").ToString)'Write in file :4085 the good value...
    con.Close()
    con.Dispose()
End Sub

这是工作......我没有看到什么????谢谢你的帮助

标签: oraclevb.netupdates

解决方案


试试这个:

Public Function GetConnexion() As OracleConnection
    Static str As New OracleConnectionStringBuilder With {
           .Password = ConfigurationManager.AppSettings(ORACLE_MDP_PDM).ToString,
           .UserID = ConfigurationManager.AppSettings(ORACLE_USER_PDM).ToString,
           .DataSource = ConfigurationManager.AppSettings(ORACLE_DTSRC_PDM).ToString
       }
    Return New OracleConnection With {.ConnectionString = str.ConnectionString}
End Function

' Note the better name and lack of return type
Private Sub updateIdObject() 
    Using con As OracleConnection = GetConnexion(), _ 
          cmd As New OracleCommand("UPDATE COUNTER SET VALUE=VALUE+1 where REFERENCE='ID_OBJECT';", con)

        con.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub

Private Sub _Default_Load(sender As Object, e As EventArgs) Handles Me.Load 
    Using con As OracleConnection = GetConnexion(), _
          cmd As new OracleCommand("SELECT VALUE  FROM COUNTER where REFERENCE = :1", con)

        cmd.Parameters.Add(New OracleParameter With {.OracleDbType = OracleDbType.Varchar2, .Value = "ID_OBJECT"})
        con.Open()

        Using dr As OracleDataReader = cmd.ExecuteReader()
           dr.Read()
           HelperJournal.WriteEntry("NewIdObject", dr.Item("VALUE").ToString)'Write in file :4085 the good value...
        End Using
   End Using
End Sub

在处理这个答案时,答案框中发生了一些奇怪的事情,因此我怀疑这里有一个放错位置的 Unicode 字符:无法打印的东西、错误的变音符号或某种不可见的空格,这可能会导致 Oracle代码。您可能需要重新键入 SQL。


推荐阅读