今天在用C#执行Oracle语句的时候出现了一个很奇怪的问题,查询字符串在PLSQL这样的Oracle工具中是可以执行的,但是在用ODP.NET(Oracle Data Provider for .NET)来进行查询的时候却出现ORA-00911错误,ORA-00911事件解释如下:
无效字符
起因: 标志符只能心数字和ASCII码字母开头,后续中也可以包含$#_。双引号内可以包含除了双引号外的所有字符,另外单引号中不能有空格,制表符或其他分隔符,违反以上规则都有可能引发无效字符错误。
呵呵,上面的本来是英文,自己翻译的,不好请见谅。最后在网上查了一些资料,算是解决了,那就是查询语句最的“;”问题。如果去掉最后的一个“;”则可以正常的执行。自己测试了一个,在用ODP.NET执行语句是这个现象是普遍存在的。但是用ADO.NET进行SQL Server查询时这个现象是不存在的,只能说这是ODP.NET的问题了。
自己试了一下在Oracle工具中如果在一个语句末尾加两个“;”,则也会出现同样的问题,所以设想如下:在ODP.NET中在进行查询向数据库提交时会自动在末尾添加分号,所以如果在字符串中有分号就会出现错误。但ADO.NET中用于连接SQL Server的进行了智能化的处理,如果末尾有分号则不加分号,如果没有分号则添加分号。所以无论有没有分号都可以正常的执行。