在Oracle中插入查询:无效的表名

时间:2013-08-22 18:00:29

标签: vb.net oracle insert

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

我能够连接,但我无法在表格中添加任何记录。我收到消息:ORA-00903:表名无效。

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

Oracle Enterprise Manager screenshot (Sorry it's in french)

以下是我正在使用的代码:

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 个答案:

答案 0 :(得分:4)

USEROracle reserved word。你有两个选择:

  1. 使用其他表格名称(例如USERSUSER_LIST)。

  2. 将名称用双引号括起来。如果你这样做,表名也会变得区分大小写,这可能导致很多“陷阱”。我建议使用不同的表名。

答案 1 :(得分: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已在其答案中正确写入(并给出了合理的解决方法)

答案 2 :(得分:1)

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

    INSERT INTO COLMANTECHNICALADMIN。“USER”(ID,FirstName)值('1','Jim');

  3. 您不应该以{{1​​}}或SYS身份连接到数据库。您的应用程序应该使用您创建的具有应用程序所需权限的特定于应用程序的帐户。

答案 3 :(得分:0)

谢谢你们的答案。

这是我的最终解决方案:

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

注: 当我尝试在末尾用半分行执行查询时,我收到一条错误消息:ORA00911:无效字符。所以我不得不删除它。

感谢您的帮助。