日期:2014-05-18  浏览次数:20946 次

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里的参数不要@
------解决方案--------------------
探讨

引用:
oracle里面的sql @要换成:

C# code

string sql = "insert into DEPARTMENT(DEPT_CODE,DEPT_NAME,DEPT_DATE) values(:count,'0',to_date(:dt,'yyyy-mm-dd hh24:mi:ss'))";
……

------解决方案--------------------
数据库中的字段我没用过date类型,也许date类型的参数不要加:,
顺便说下,如果是存储过程,参数前也不能加符号,而且参数名称要和存储过程的参数名称一样。
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html