C#操作oracle时,为什么不能使用参数
oracle中表结构,id(varchar2(50)),name(varchar2(50)),commitdate(date)
C#语句:
C# code
string sql = "insert into DEPARTMENT(id,name,commitdate) values(@count,'0',to_date(@dt,'yyyy-mm-dd hh24:mi:ss'))";
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.Add("@dt", OleDbType.VarChar, 50);
cmd.Parameters["@dt"].Value =DateTime.Now;
//cmd.Parameters.AddWithValue("@dt",DateTime.Now);//此法也不行
cmd.Parameters.Add("@count", OleDbType.VarChar, 50);
cmd.Parameters["@count"].Value = count;//count已赋值
if (cmd.ExecuteNonQuery() > 0) //此处已设断点
{
MessageBox.Show("插入成功");
count++;
}
}
执行cmd.ExecuteNonQuery()时,报错:
在执行命令过程中,发生了一个或多个错误。
ORA-00936: 缺失表达式。
把参数改为值就可以插入。
不知为何不让用参数。
既然不让用参数,为什么还能用cmd.Parameters.AddWithValue("@dt",DateTime.Now)这条语句。到底能不能用参数,怎么用。请指点。
------解决方案--------------------为什么不用问号?
string sql = "insert into DEPARTMENT(id,name,commitdate) values(?,'0',to_date(?,'yyyy-mm-dd hh24:mi:ss'))";
------解决方案--------------------oracle里面的sql @要换成:
------解决方案--------------------不懂这个问题。。。帮lz顶了。。。
------解决方案--------------------在SQL里参数要带@,oracle里的参数不要@
------解决方案--------------------
------解决方案--------------------数据库中的字段我没用过date类型,也许date类型的参数不要加:,
顺便说下,如果是存储过程,参数前也不能加符号,而且参数名称要和存储过程的参数名称一样。
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html