System.Data.OracleClient.OracleException:“ORA-01036: 非法的变量名/编号”

今天用C#写的程序使用Oracle数据库的时候出现了如下异常:

System.Data.OracleClient.OracleException:“ORA-01036: 非法的变量名/编号”

出现异常的代码段是这样的:


                     sqlStr = "INSERT INTO serial_number (mo_id,product_id,create_date,first_no,begin_no,modify_date) VALUES(:mo_id,:product_id,sysdate,:first_no,:begin_no,sysdate)";//SQL语句
                            conn=new OracleConnection(ConnStr2);//创建OracleConnection对象
                            conn.Open();//打开连接
                            comm=conn.CreateCommand();//创建OracleCommand对象
                            comm.CommandText = sqlStr;//OracleCommand对象执行的SQL
                            comm.Parameters.Add(new OracleParameter(":mo_id",moId));//设置参数表达式的值
                            comm.Parameters.Add(new OracleParameter(":product_id",productId));
                           comm.Parameters.Add(new OracleParameter(":first_no",code+code2+begin));
                           comm.Parameters.Add(new OracleParameter(":begin_no",start));
                            comm.ExecuteNonQuery();//向数据表插入数据

​

通过排查发现,连接不同的数据库就要使用不同的参数表达式,不同数据库的参数表达式如下:

SqlClient参数表达式:@ParameterName   
OracleClient参数表达式::ParameterName   
OleDB.Net参数表达式:? 

现在只需要将代码中的@符号改为:符号就可以了,注意,参数表达式的名字要和SQL语句里面的相同。

​


                     sqlStr = "INSERT INTO serial_number (mo_id,product_id,create_date,first_no,begin_no,modify_date) VALUES(:mo_id,:product_id,sysdate,:first_no,:begin_no,sysdate)";//SQL语句
                            conn=new OracleConnection(ConnStr2);//创建OracleConnection对象
                            conn.Open();//打开连接
                            comm=conn.CreateCommand();//创建OracleCommand对象
                            comm.CommandText = sqlStr;//OracleCommand对象执行的SQL
                            comm.Parameters.Add(new OracleParameter(":mo_id",moId));//设置参数表达式的值
                            comm.Parameters.Add(new OracleParameter(":product_id",productId));
                           comm.Parameters.Add(new OracleParameter(":first_no",code+code2+begin));
                           comm.Parameters.Add(new OracleParameter(":begin_no",start));
                            comm.ExecuteNonQuery();//向数据表插入数据

​

​

​

改好后可以正常运行了 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值