2013-08-22 70 views
0

我已經創建了一個簡單的Oracle表,我試圖連接到VB.net在Oracle中插入查詢:無效的表名

我能夠連接但我無法向表中添加任何記錄。我收到消息: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 

感謝。

+1

如果您沒有連接成表的所有者,除非a)該表完全符合模式名稱,或者b)您有指向該表的同義詞,或者c)您更改了該表會話設置current_schema。 –

回答

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 

但是你的首要問題是Word用戶這是一個保留關鍵字作爲Ed Gibbs已經正確地寫在它的答案(並給予合理的解決方法)

4

USEROracle reserved word。你有兩個選擇:

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

  2. 將名稱放在雙引號中。如果你這樣做,表格名稱也會區分大小寫,這可能會導致很多「陷阱」。我建議使用不同的表名。

+0

+1我懷疑是一樣的,但我檢查了錯誤的部分http://docs.oracle.com/cd/A58617_01/server.804/a58225/ap_keywd.htm – Steve

+0

不用擔心:)另外請查看@史蒂夫;他說,一旦處理了表名,使用'ExecuteReader'作爲'INSERT'可能會遇到麻煩。我認爲他是對的。 –

1
  1. 首先,你要連接爲SYSTEM但該表由COLMANTECHNICALADMIN擁有。假設您尚未在SYSTEM架構中創建同義詞,並且您未執行ALTER SESSION SET current_schema=COLMANTECHNICALADMIN,則需要完全限定表名。
  2. USER是保留字。如果你確實真的想要使用保留字作爲表名,那麼每次引用它時都需要用雙引號將其括起來,並確保始終正確地使用名稱。選擇一個不會與保留字相沖突的名字通常會更好。但是,如果您堅持這樣做,您的查詢將需要爲

    INSERT INTO COLMANTECHNICALADMIN。「USER」(ID,FirstName)values('1','Jim');

  3. 您不應該連接到數據庫作爲SYSSYSTEM。您的應用程序應使用您創建的具有應用程序所需特權的特定於應用程序的帳戶。

+0

謝謝賈斯汀。我更改了表的名稱並執行了您的查詢。 –

0

謝謝大家爲你解答。

這是我最終的解決方案:

  • 重命名的用戶表用戶
  • 運行查詢 「INSERT INTO TECHNICALADMIN.USERS(ID,名字)VALUES(1, '吉姆')」

備註: 當我試圖與年底semicolumn執行查詢,我得到一個錯誤信息:ORA00911:無效字符。所以我不得不刪除它。

感謝您的幫助。