关于OracleCommand.Parameters 的用法,我写了一个SQL,但总是报错,请大家指教!

问题描述

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);
解决方案十一:
呵呵,解决了,谢谢楼上的

时间: 2024-10-27 19:33:13

关于OracleCommand.Parameters 的用法,我写了一个SQL,但总是报错,请大家指教!的相关文章

怎么写出一个sql语句来表示销售的配件的数量

问题描述 怎么写出一个sql语句来表示销售的配件的数量 String sql = "select '配件A' label,12 value " + "union all " + "select '配件B' label,10 value "; 来修改这个sql来表示表中的内容 解决方案 啥玩意,你这不是已经有这些数据了吗,还要改什么

jdbc-拼接SQL异常,报错No parameters defined during prepareCall

问题描述 拼接SQL异常,报错No parameters defined during prepareCall 查了一下是SQL中有东西被当做字符串处理了,但找不出哪里问题大神帮帮我吧 解决方案 String sql = ""SELECT a.* (CASE WHEN CEIL(IFNULL(b.purchasenum0)) = 0 "" +THEN 1 ELSE CEIL(IFNULL(b.purchasenum0)) END) AS purchasenum FR

C#写COM,VB6.0调试报错:自动化错

问题描述 C#写COM组件,已经注册了,并导出了tlb文件.VB6.0调用,编译生成了exe文件,exe运行调用了C#写COM组件中的接口,没有报错,并可以实现接口功能:为什么VB6.0环境中调试运行,调用C#写COM组件中接口却报错,错误如下:自动化错-2147024894(80070002)-----------------------------请高人帮忙指点下,谢谢!!! 解决方案 解决方案二: mark顶一下解决方案三: 请各位指点下..........解决方案四: 没有这样写过:你为

spring 写junit测试时使用aop报错

问题描述 spring 写junit测试时使用aop报错 当我在我的配置文件中加上如下配置会包下面的错误,我不加时就不会出错这是为什么 <aop:config> <aop:pointcut id="interceptorPointCuts" expression="execution(* cn.qtt.service.*.*(..)) " /> <aop:pointcut id="interceptorPointCutsNew

java-xml写sql语句,还报错啊

问题描述 xml写sql语句,还报错啊 这个怎么回事啊,求大神讲解 解决方案 不能使用 < 改成 CDATA 如 <![CDATA[<=]] 解决方案二: 你的xml里有特殊字符,需要CDATA来防止转义 解决方案三: xml的特殊字符需要放到<![CDATA[ ]]>里面,不然不会被识别 解决方案四: 为什么放进去,读不出数据来啊? 解决方案五: and cc.task_createtime >= #{createtimeStart} 这种形式可以查出数据来,但是用了

为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么?

问题描述 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 为什么link中调用函数参数写少了也不会报错?难道参数写少了也可以调用么? 解决方案 有默认参数这个东东,所以有可能存在参数写少了不会报错:但写多了,是一定会报错的.

请问RPG游戏中跟剧情对话的游戏脚本该怎么写?有这样的例子吗?请高手指教????

问题描述 请问RPG游戏中跟剧情对话的游戏脚本该怎么写?有这样的例子吗?请高手指教???? 解决方案 解决方案二:该回复于2010-12-02 17:24:18被版主删除解决方案三:该回复于2010-10-27 16:09:59被版主删除解决方案四:关于这个你可以去U9论坛找地图制作请教很简单一些傻瓜脚本而已解决方案五:网上资料很多...没做过.

我按照书上写了一段代码为什么报错呢?如何解决?

问题描述 错误1程序"d:用户目录我的文档VisualStudio2013ProjectsConsoleApplication1ConsoleApplication1objDebugConsoleApplication1.exe"不包含适合于入口点的静态"Main"方法D:用户目录我的文档VisualStudio2013ProjectsConsoleApplication1ConsoleApplication1CSCConsoleApplication1 解决方案

我在ConversationListController类viewDidLoad写self.showRefreshHeader = YES,系统报错

问题描述 我在聊天写self.showRefreshHeader = YES,也是报同样的错误 解决方案 这是MJ刷新的方法,3rdparty里面的解决方案二:我知道,可是没法刷新