问题描述
OracleConnectionConn=ConnStr();Conn.Open();OracleCommandComm=null;OracleDataReaderda1=null;stringsql="selectname,idcardfromm_person";Comm=newOracleCommand(sql,Conn);try{stringstrSql="";if(idcard!=""){if(strSql!=""){strSql="andidcard=:idcard";}else{strSql="idcard=:idcard";}Comm.Parameters.Add("idcard",OracleType.VarChar,18);Comm.Parameters["idcard"].Value=idcard;}if(strSql!=""){sql=sql+"where"+strSql;}da1=Comm.ExecuteReader();}catch(Exceptione){thrownewException(e.Message);}finally{da1.Close();Conn.Close();Comm.Dispose();}代码我是这么写的,但SQL语句在数据库中执行没问题,但在程序中执行,da1总返回为空,抛出的异常为:ORA-01036:非法的变量名/编号.不知道什么问题,难道是拼SQL的问题吗?如果我不拼SQL,直接传参数是没问题,就写成这样的形式就出问题.请大家指教!谢谢
解决方案
解决方案二:
if(strSql!=""){strSql="andidcard=:idcard";}else{strSql="idcard=:idcard";}改为if(strSql!=""){strSql="andidcard=idcard";}else{strSql="idcard=idcard";}试下
解决方案三:
sorry,应该是if(strSql!=""){strSql="andidcard=@idcard";}else{strSql="idcard=@idcard";}
解决方案四:
效果一样,还是不行!SQLSERVER中是这么写的,ORACLE应该不是这么写的吧
解决方案五:
if(strSql!=""){strSql+="andidcard=:idcard";//注意是+=}else{strSql+="idcard=:idcard";//注意是+=}
解决方案六:
sorry,没看清楚。OracleConnectionConn=ConnStr();Conn.Open();OracleCommandComm=null;OracleDataReaderda1=null;stringsql="selectname,idcardfromm_person";try{stringstrSql="";if(idcard!=""){if(strSql!=""){strSql="andidcard=:idcard";}else{strSql="idcard=:idcard";}Comm.Parameters.Add("idcard",OracleType.VarChar,18);Comm.Parameters["idcard"].Value=idcard;}if(strSql!=""){sql=sql+"where"+strSql;}Comm=newOracleCommand(sql,Conn);da1=Comm.ExecuteReader();}catch(Exceptione){thrownewException(e.Message);}finally{da1.Close();Conn.Close();Comm.Dispose();}
解决方案七:
楼上没看到我下面写的吧:if(strSql!=""){sql=sql+"where"+strSql;},唉,问题还是没解决,不过谢谢楼上的
解决方案八:
刚才查了下,OracleCommand是用 =: 1、Oracle的更新不能出现Parameters顺序跟传来的参数顺序不一直的问题2、字段名太长,有的地方说是要小于32个字符,但我使用,它还要比32小,大家只能尽量控制字段名的长度3、虽然在Sql语句中使用冒号“:”代表参数,但在创建OracleParameter时,指定的参数名称不能使用冒号,在newOracleParameter时,ParameterName只能使用参数的字符部分
解决方案九:
Comm=newOracleCommand(sql,Conn);写到你的位置,你前面的怎么会加参数(Comm.Parameters.Add)呢?
解决方案十:
通常为了避免麻烦:Comm.Parameters.Add("idcard",OracleType.VarChar,18);Comm.Parameters["idcard"].Value=idcard;这东西我一般直接写成Comm.Parameters.AddWithValue("idcard",idcard);
解决方案十一:
呵呵,解决了,谢谢楼上的