当前位置:编程学习 > C#/ASP.NET >>

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

 OracleConnection Conn = ConnStr();
            Conn.Open();
            OracleCommand Comm = null;
            OracleDataReader da1 = null;

            string sql = "select name,idcard from m_person ";
            Comm = new OracleCommand(sql, Conn);
            try
            {
                string strSql = "";
               

                if (idcard != "")
                {
                    if (strSql != "")
                    {
                        strSql = "and idcard =: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 (Exception e)
            {
                throw new Exception(e.Message);
                
            }
            finally
            {
                da1.Close();
                Conn.Close();
                Comm.Dispose();
            }
代码我是这么写的,但SQL语句在数据库中执行没问题,但在程序中执行,da1总返回为空,抛出的异常为:ORA-01036: 非法的变量名/编号.
   不知道什么问题,难道是拼SQL的问题吗?如果我不拼SQL,直接传参数是没问题,就写成这样的形式就出问题.请大家指教!谢谢 --------------------编程问答--------------------                 if (strSql != "") 
                    { 
                        strSql = "and idcard =:idcard"; 
                    } 
                    else 
                    { 
                        strSql = " idcard = :idcard"; 
                    } 

改为

                if (strSql != "") 
                    { 
                        strSql = "and idcard =idcard"; 
                    } 
                    else 
                    { 
                        strSql = " idcard =idcard"; 
                    } 
试下 --------------------编程问答-------------------- sorry ,应该是     
  if (strSql != "") 
                    { 
                        strSql = "and idcard =@idcard"; 
                    } 
                    else 
                    { 
                        strSql = " idcard =@idcard"; 
                    } 
--------------------编程问答-------------------- 效果一样,还是不行!SQL SERVER中是这么写的,ORACLE应该不是这么写的吧 --------------------编程问答--------------------
if (strSql != "") 
                    { 
                        strSql += "and idcard =:idcard"; //注意是+=
                    } 
                    else 
                    { 
                        strSql += " idcard = :idcard"; //注意是+=

                    } 
--------------------编程问答-------------------- sorry,没看清楚。

OracleConnection Conn = ConnStr(); 
Conn.Open(); 
OracleCommand Comm = null; 
OracleDataReader da1 = null; 

string sql = "select name,idcard from m_person "; 

try 

                string strSql = ""; 
              

                if (idcard != "") 
                { 
                    if (strSql != "") 
                    { 
                        strSql = "and idcard =:idcard"; 
                    } 
                    else 
                    { 
                        strSql = " idcard = :idcard"; 
                    } 
                    Comm.Parameters.Add("idcard", OracleType.VarChar,18); 
                    Comm.Parameters["idcard"].Value = idcard; 


if (strSql != "") 

    sql = sql + " where " + strSql; 

    Comm = new OracleCommand(sql, Conn);           
    da1 = Comm.ExecuteReader(); 

catch (Exception e) 

                throw new Exception(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时,指定的参数名称不能使用冒号,在new OracleParameter时,ParameterName只能使用参数的字符部分
--------------------编程问答-------------------- Comm = new OracleCommand(sql, Conn);       
写到你的位置,你前面的怎么会加参数(Comm.Parameters.Add)呢? --------------------编程问答-------------------- 通常为了避免麻烦:
Comm.Parameters.Add("idcard", OracleType.VarChar,18); 
Comm.Parameters["idcard"].Value = idcard; 

这东西我一般直接写成Comm.Parameters.AddWithValue("idcard", idcard);
--------------------编程问答-------------------- 呵呵,解决了,谢谢楼上的
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,