从 vb.net 更新 oracle 中的序列

Update sequence in oracle from vb.net

我尝试在 table 中增加一个字段...但是我遇到了一个错误。

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

错误:

Message:ORA-00911: caractère non valide Exception:Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-00911: caractère non valide à 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, OracleException& 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

当我 copy/Paste 在 oracleDevelopper 工具中...它的工作... 当我尝试 select

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

这是工作... 我怎么没看到???? 感谢您的帮助

试试这个:

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.