C# 无法向Oracle数据库插入数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 无法向Oracle数据库插入数据相关的知识,希望对你有一定的参考价值。

如题,我在C#里执行一段向Oracle数据库插入数据的代码,在程序里调试没出现错误,但是在PL/SQL Developer 可视化界面中,却无法显示该数据这是什么原因啊,跟用户权限有关吗?我在PL/SQL Developer 设置该用户权取为dba,系统权限添加很多条,包括select any table,insert any table等等,但还是不成,这个问题应该怎么解决啊?

(看能不能帮到你,来自CSDN的引用)注意:先用单步调试,找出出错程序语句
<1>未注册XXX动态链接库
(未注册动态链接库文件或者该方法所在的类库不存在)

<2>未将对象设置引用到对象实例
(没有给对象正确赋值,可检查参数值,引用了未初始化的变量)

<3> “myDelegate”是不明确的引用
(同等级别的名字空间节点上出现同名委托)

<4>不支持并行的事务
(新事务未提交或者事务执行不完整,注意,如果提交事务之前存在return语句,那么必须将事务提交放在return之前执行)

<5>ORA: 找不到预期的FROM关键字
(SQL语句中关键字冲突)
(From前面字符未保留空格)

<6>字符串格式不匹配
(Oracle中整数类型参数应用程序中可用字符串代替,但Varchar类型参数在应用程序中必须对应为字符串类型)
(参数转换不正确,参数类型与数据表种字段类型不匹配)

<7>缺少表达式/未找到预期的关键字FROM
(SQL语句错误)
(可用快速监视的方法查看变量的执行情况)
(Oracle中不能用AS关键字给表别名,可去掉AS)
(转换错误,例如char应为to_char,详情请参阅相关Oracle技术资料)

<7>SQL命令未正确结束
(缺少括号或其他标示符)

<8>CURRENT TIMESTAMP
(1)改为:CURRENT_TIMESTAMP,即可
(2)表别名只需: select * from tableName A 即可,不能写成: select * from tablename AS A
(3)to_char(char), to_number(int), to_date(date)

<9>dual 代替 IDM DB2中的SYSIBM.SYSDUMMY1, 用to_date代替timestamp
为组合框指定数据源的时候,要把数据源放在前面,例如 cmb.DataSource = datasource; cmb.DisplayNumber = ...
<10>调用存储过程时出错,参数个数或者类型错误
(检查参数名称、值、类型、长度、传出方向是否和存储过程参数一致,须仔细检查,不然可能一处出错,全盘皆错。鄙人曾经碰到过一次,36个参数要传入存储过程,只因为一个参数名出错,结果系统老提示以上异常 。

<11>执行存储过程中,插入的列过大!
(参数长度太小,或者被引用的字符串没有去掉空格)
<12>给CURRENT_TIMESTAMP 加上N个小时
select CURRENT_TIMESTAMP + N/24 from dual

<12>给组合框指定数据源,所有属性都正常,但是就是无法正常显示!

详见:一个罕见C#异常的解决过程
<13>缺乏应有的引用和程序集,奇怪,我明明添加了呀?
(1)系统内部错误,关掉开发环境,重启动即可!
(2)引用名发生大小写错误!

<14>"Control"是不明确的引用
(1)在系统感知的名字空间下,出现名字相同的类。比如:System.Windows.Forms.TextBox, MyTest.TextBox
(2)详细指定名字空间全称即可,不能以TextBox引用,因为系统不知道你要引用的是哪个TextBox

<15>日期格式图片在转换整个输入字符串之前结束
(1)这通常因为程序中的诸如此类的语句:cast(djrq as char(10))||'' ''||cast(djsj as char(10))
(2)应改为: to_date(to_char(djrq,'yyyy-mm-dd')||' '||to_char(djsj,'hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')

<16>无法处理的服务名
(1)这通常是因为连接字符串错误,或者应用程序所在的文件夹名称错误,导致无法登录Oracle服务器。
例如如果文件夹命名为aaa(dd)等诸如此类含有非字母和数字组合的名称就会因发此异常,特别注意。

<17>OCI:20053 溢出错误
(1)这通常是因为数值类型的小数位太长,导致Adapter的Fill()方法抛出异常。解决办法是使用Round函数,限制其小数位长度,例如Round(1/6, 3),把小数位长度限制在3位。

<18>数值超出了范围
(1)这通常出现在数据转换中,转换设置的长度小于数值本身的长度,导致Adapter的Fill()方法抛出异常。解决办法是,例如转换字符串,可写为Cast( Variable as Varchar( 100 ) ),把设置的长度尽可能的超过原变量长度。

<17>OCI: 数字或值错误
(1)你检查之后通常会发现语句本身好像没错误,单独将代码段摘出来执行也没有问题,但是放在存储过程里就是不行。这是Oracle系列产品的一个缺陷,需要将Left Join 和 Union All 改写为其他方式就可以。
参考技术A 如果该用户有DBA权限就肯定能插入数据。你看看oracle报的什么错误(ORA-),或者把你的insert语句发出来。 参考技术B 在可视化界面上面 你提交事务了没?。。。没有提交事务的 新加进的数据是看不到的 参考技术C 很有可能是没有commit 参考技术D 你怎么也用oracle?

以上是关于C# 无法向Oracle数据库插入数据的主要内容,如果未能解决你的问题,请参考以下文章

c#通过for循环多次向数据库中插入数据。

Oracle loop循环无法插入数据

如何向一个oracle表中快速插入很多条数据

JDBC向oracle插入数据

java(jdbc)向oracle中插入记录

python3向oracle插入数据