关于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 != "")--------------------编程问答-------------------- 效果一样,还是不行!SQL SERVER中是这么写的,ORACLE应该不是这么写的吧 --------------------编程问答--------------------
{
strSql = "and idcard =@idcard";
}
else
{
strSql = " idcard =@idcard";
}
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