oracle中表结构,id(varchar2(50)),name(varchar2(50)),commitdate(date)C#语句:               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)这条语句。到底能不能用参数,怎么用。请指点。

解决方案 »

  1.   

    为什么不用问号?string sql = "insert into DEPARTMENT(id,name,commitdate) values(?,'0',to_date(?,'yyyy-mm-dd hh24:mi:ss'))";
      

  2.   

    oracle里面的sql  @要换成:
      

  3.   

    在SQL里参数要带@,oracle里的参数不要@
      

  4.   


                   string sql = "insert into DEPARTMENT(DEPT_CODE,DEPT_NAME,DEPT_DATE) 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 = dt;
                        cmd.Parameters.AddWithValue(":dt",DateTime.Now);
                        //cmd.Parameters.Add("@count", OleDbType.VarChar, 50); 
                        //cmd.Parameters["@count"].Value = count;
                        cmd.Parameters.AddWithValue(":count", count);
                        if (cmd.ExecuteNonQuery() > 0)
                        {
                            MessageBox.Show("插入成功");
                            count++;
                        }
                    }这个方法也不行
    错误:
    ORA-01008: 并非所有变量都已绑定
      

  5.   


                    string sql = "insert into DEPARTMENT(DEPT_CODE,DEPT_NAME,DEPT_DATE) values(:count,'0',to_date('2010-6-24 15:09:02','yyyy-mm-dd hh24:mi:ss'))";                using (OracleCommand cmd = new OracleCommand(sql, conn))
                    {
                        OracleParameter p1 = new OracleParameter("count", OracleDbType.Varchar2, 50);
                        p1.Value = count;
                        cmd.Parameters.Add(p1);                    if (cmd.ExecuteNonQuery() > 0)//执行到此处,死在这里了,不知为什么。
                        {
                            MessageBox.Show("插入成功");
                            count++;
                        }
                    }
      

  6.   

    cmd.Parameters.AddWithValue(":dt",DateTime.Now);
    这里的:不要
      

  7.   

    数据库中的字段我没用过date类型,也许date类型的参数不要加:,
    顺便说下,如果是存储过程,参数前也不能加符号,而且参数名称要和存储过程的参数名称一样。