0

我创建了一个简单的 oracle 表,我正在尝试连接到 VB.net

我可以连接,但无法向表中添加任何记录。我收到消息:ORA-00903:无效的表名。

这是我创建表的 Oracle 数据库管理器的预览屏幕。

Oracle Enterprise Manager 屏幕截图(抱歉是法语)

这是我正在使用的代码:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Oracle = New OracleObject("192.128.7.15", 1521, "TechnicalDatabase", "system", "admin")

        If Oracle.Connect = False Then
            Exit Sub

    End If

    Dim Sql As String

    Sql = "INSERT INTO USER (ID, FirstName) values ('1','Jim');"

    Oracle.ExecuteSubQuery(Sql)
    Oracle.Disconnect()
End Sub

    Public Function ExecuteSubQuery(ByVal SQL As String) As Boolean
    Dim Command As New OracleCommand(SQL, Connection)

    Command.CommandType = CommandType.Text

    Try
        Command.ExecuteReader()
    Catch ex As Exception
        MsgBox("Error in query !" & Chr(13) & ex.Message)
        Return False
    End Try

    Return True
End Function

谢谢。

4

4 回答 4

4

USEROracle 保留字。你有两个选择:

  1. 使用不同的表名(例如USERSUSER_LIST)。

  2. 将名称放在双引号中。如果这样做,表名也会区分大小写,这会导致很多“陷阱”。我建议使用不同的表名。

于 2013-08-22T18:04:25.347 回答
1

尝试用 ExecuteNonQuery 替换 ExecuteReader

Public Function ExecuteSubQuery(ByVal SQL As String) As Boolean
    Dim Command As New OracleCommand(SQL, Connection)

    Command.CommandType = CommandType.Text

    Try
        Command.ExecuteNonQuery()
        Return True

   Catch ex As Exception
        MsgBox("Error in query !" & Chr(13) & ex.Message)
        Return False
    End Try
End Function

但是,您的主要问题是 USER 一词,它是保留关键字,正如Ed Gibbs其答案中正确写入的那样(并给出了合理的解决方法)

于 2013-08-22T18:04:04.687 回答
1
  1. 首先,您正在连接,SYSTEM但该表归COLMANTECHNICALADMIN. 假设您尚未在SYSTEM架构中创建同义词并且您没有执行ALTER SESSION SET current_schema=COLMANTECHNICALADMIN,则需要完全限定表名。
  2. USER是保留字。如果您真的、真的、真的想使用保留字作为表名,则每次引用它时都需要用双引号将其括起来,并确保始终正确地大写名称。选择一个不与保留字冲突的名称通常会好得多。但是,如果您坚持这样做,您的查询将需要

    INSERT INTO COLMANTECHNICALADMIN."USER" (ID, FirstName) values ('1','Jim');

  3. 您不应该以SYS或连接到数据库SYSTEM。您的应用程序应该使用您创建的某些特定于应用程序的帐户,该帐户具有应用程序所需的任何权限。

于 2013-08-22T18:25:06.320 回答
0

谢谢你们的回答。

这是我的最终解决方案:

  • 将 USER 表重命名为 USERS
  • 运行查询“INSERT INTO TECHNICALADMIN.USERS (ID, FirstName) values (1,'Jim')”

备注:当我尝试在末尾使用半列执行查询时,收到错误消息:ORA00911: Invalid Character。所以我不得不删除它。

谢谢你的帮助。

于 2013-08-26T14:50:22.047 回答