我创建了一个简单的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
感谢。
答案 0 :(得分:4)
USER
是Oracle reserved word。你有两个选择:
使用其他表格名称(例如USERS
或USER_LIST
)。
将名称用双引号括起来。如果你这样做,表名也会变得区分大小写,这可能导致很多“陷阱”。我建议使用不同的表名。
答案 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)
SYSTEM
身份进行连接,但该表由COLMANTECHNICALADMIN
拥有。假设您尚未在SYSTEM
架构中创建同义词且未执行ALTER SESSION SET current_schema=COLMANTECHNICALADMIN
,则需要完全限定表名。 USER
是保留字。如果你真的,真的,真的想要使用保留字作为表名,那么每次引用它时都需要用双引号将其括起来,并确保始终正确地将名称大写。选择一个不与保留字冲突的名称通常会好得多。但是,如果你坚持这样做,你的查询将需要
INSERT INTO COLMANTECHNICALADMIN。“USER”(ID,FirstName)值('1','Jim');
您不应该以{{1}}或SYS
身份连接到数据库。您的应用程序应该使用您创建的具有应用程序所需权限的特定于应用程序的帐户。
答案 3 :(得分:0)
谢谢你们的答案。
这是我的最终解决方案:
注: 当我尝试在末尾用半分行执行查询时,我收到一条错误消息:ORA00911:无效字符。所以我不得不删除它。
感谢您的帮助。