【问题标题】:Update sequence in oracle from vb.net从 vb.net 更新 oracle 中的序列
【发布时间】:2021-06-14 19:44:12
【问题描述】:

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

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:字符无效 异常: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(字符串的CommandText,OracleParameterCollection paramColl,的CommandType命令类型,OracleConnectionImpl connectionImpl,的Int32 longFetchSize,Int64的clientInitialLOBFS,OracleDependencyImpl orclDependencyImpl,Int64的[]&scnFromExecution,OracleParameterCollection&bindByPositionParamColl,布尔逻辑bBindParamPresent,OracleException&exceptionForArrayBindDML,连接的OracleConnection,OracleLogicalTransaction&oracleLogicalTransaction , 布尔值是FromEF) à 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

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

【问题讨论】:

  • 我会删除那个分号。它用于分隔语句并且您没有多个语句
  • 了解Using 块。此外,Sub 没有返回类型。
  • 正在处理一个答案,我在答案框中出现了奇怪的东西,让我怀疑这里有一个放错位置的 Unicode 字符:无法打印的东西、错误的变音符号或某种不可见的空格.
  • 我也尝试删除分号,但我有错误消息说缺少重要...。然后分号是 Oracle 的语法

标签: oracle vb.net updates


【解决方案1】:

试试这个:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多