用的是Oracle表,提交数据时报错;说是:《在执行命令过程中,发生了一个或多个错误。 ORA-00936: missing expression》缺少表达式,该怎么解决;请大侠们指点!void Button1_Click(object sender, EventArgs e) 
{
   try
   {
      string Connectstr = "Provider=MSDAORA;user id=bgzdh;data source=zymis;password=bgzdh2005";
      OleDbConnection Connection = new OleDbConnection(Connectstr);
      OleDbCommand Command = new OleDbCommand("INSERT INTO XC_DWTG(TITLE, AUTHOR, AUTH_UNIT, EDITOR, TYPE, MEDIA, POST_DATE, ZY_DATE, YT_DATE, TV_DATE, BS_DATE, REMARK) VALUES (@TITLE,@AUTHOR,@AUTH_UNIT,@EDITOR,@TYPE,@MEDIA,@POST_DATE,@ZY_DATE,@YT_DATE,@TV_DATE,@BS_DATE,@REMARK)",Connection);      Command.Parameters.Add(new OleDbParameter("@TITLE", System.Data.OleDb.OleDbType.VarWChar, 50));
      Command.Parameters.Add(new OleDbParameter("@AUTHOR", OleDbType.VarChar, 22));
      Command.Parameters.Add(new OleDbParameter("@AUTH_UNIT", OleDbType.VarChar, 50));
      Command.Parameters.Add(new OleDbParameter("@EDITOR", OleDbType.VarChar, 22));
      Command.Parameters.Add(new OleDbParameter("@TYPE", OleDbType.VarChar, 10));
      Command.Parameters.Add(new OleDbParameter("@MEDIA", OleDbType.VarChar, 20));
      Command.Parameters.Add(new OleDbParameter("@POST_DATE", OleDbType.DBDate, 0));
      Command.Parameters.Add(new OleDbParameter("@ZY_DATE", OleDbType.DBDate, 0));
      Command.Parameters.Add(new OleDbParameter("@YT_DATE", OleDbType.DBDate, 0));
      Command.Parameters.Add(new OleDbParameter("@TV_DATE", OleDbType.DBDate, 0));
      Command.Parameters.Add(new OleDbParameter("@BS_DATE", OleDbType.DBDate, 0));
      Command.Parameters.Add(new OleDbParameter("@REMARK", OleDbType.VarChar, 50));      Command.Parameters["@TITLE"].Value=TextBox1.Text;
      Command.Parameters["@AUTHOR"].Value=TextBox2.Text;
      Command.Parameters["@AUTH_UNIT"].Value=TextBox3.Text;
      Command.Parameters["@EDITOR"].Value=TextBox4.Text;
      Command.Parameters["@TYPE"].Value=DropDownList1.SelectedItem.Text;
      Command.Parameters["@MEDIA"].Value=DropDownList2.SelectedItem.Text;
      Command.Parameters["@POST_DATE"].Value=TextBox5.Text;
      Command.Parameters["@ZY_DATE"].Value=TextBox6.Text;
      Command.Parameters["@YT_DATE"].Value=TextBox7.Text;
      Command.Parameters["@TV_DATE"].Value=TextBox8.Text;
      Command.Parameters["@BS_DATE"].Value=TextBox9.Text;
      Command.Parameters["@REMARK"].Value=TextBox10.Text;      Connection.Open();
      Command.ExecuteNonQuery();
      Connection.Close();
   }
   catch (System.Data.OleDb.OleDbException ex)
   {
      Response.Write(ex.Message.ToString());
   }
}

解决方案 »

  1.   

    把OleDbCommand Command = new OleDbCommand("INSERT INTO XC_DWTG(TITLE, AUTHOR, AUTH_UNIT, EDITOR, TYPE, MEDIA, POST_DATE, ZY_DATE, YT_DATE, TV_DATE, BS_DATE, REMARK) VALUES (@TITLE,@AUTHOR,@AUTH_UNIT,@EDITOR,@TYPE,@MEDIA,@POST_DATE,@ZY_DATE,@YT_DATE,@TV_DATE,@BS_DATE,@REMARK)",Connection);
    放到
    Connection.Open();
    Command.ExecuteNonQuery();
    前面试试,是不是你放的太前了,还没给他赋值呢
    然后再检查一下类型是不是匹配
      

  2.   

    你这上面的取值方式,完全没有根据数据字段的要求转换为相应的格式,这样能写进去吗?
    比如象下面这样
    Command.Parameters["@POST_DATE"].Value=TextBox5.Text;
    就应该写成
    Command.Parameters["@POST_DATE"].Value=DateTime.Parse(TextBox5.Text);
    其他相应的数据也必须一一进行转换
      

  3.   

    将    Command.Parameters["@POST_DATE"].Value=TextBox5.Text;
          Command.Parameters["@ZY_DATE"].Value=TextBox6.Text;
          Command.Parameters["@YT_DATE"].Value=TextBox7.Text;
          Command.Parameters["@TV_DATE"].Value=TextBox8.Text;
          Command.Parameters["@BS_DATE"].Value=TextBox9.Text;应该写成:
          Command.Parameters["@POST_DATE"].Value=DateTime.Parse(TextBox5.Text);
          Command.Parameters["@ZY_DATE"].Value=DateTime.Parse(TextBox6.Text);
          Command.Parameters["@YT_DATE"].Value=DateTime.Parse(TextBox7.Text);
          Command.Parameters["@TV_DATE"].Value=DateTime.Parse(TextBox8.Text);
          Command.Parameters["@BS_DATE"].Value=DateTime.Parse(TextBox9.Text);
    后依然是同样的错误
      

  4.   

    该字符串未被识别为有效的 DateTime
          Command.Parameters["@POST_DATE"].Value=DateTime.Parse(TextBox5.Text);
          Command.Parameters["@ZY_DATE"].Value=DateTime.Parse(TextBox6.Text);
          Command.Parameters["@YT_DATE"].Value=DateTime.Parse(TextBox7.Text);
          Command.Parameters["@TV_DATE"].Value=DateTime.Parse(TextBox8.Text);
          Command.Parameters["@BS_DATE"].Value=DateTime.Parse(TextBox9.Text);
    凡是上面列出的日期型的字段的值未被识别为有效的 DateTime,该怎么弄啊?
      

  5.   

    对不起!是我搞错了,楼主的写入方式没有问题,我上面说的是运用存储过程写的时候才那样的.
    但我记得,ORACLE写入的时候,不应该是如下啊
    ("INSERT INTO XC_DWTG(TITLE, AUTHOR, AUTH_UNIT, EDITOR, TYPE, MEDIA, POST_DATE, ZY_DATE, YT_DATE, TV_DATE, BS_DATE, REMARK) VALUES (@TITLE,@AUTHOR,@AUTH_UNIT,@EDITOR,@TYPE,@MEDIA,@POST_DATE,@ZY_DATE,@YT_DATE,@TV_DATE,@BS_DATE,@REMARK)"
    后面值部分的@号,应是:号.
    然后赋值部分
    Command.Parameters["@BS_DATE"].Value=TextBox9.Text;
    里面的@号就可以去除了.
    还有时间里面的Command.Parameters.Add(new OleDbParameter("@BS_DATE", OleDbType.DBDate, 0));,最后面的长度把它去了吧.
      

  6.   

    搞错了,应该是你的connection字符串有问题
      

  7.   

    我的string Connectstr = "Provider=msdaora;user id=bgzdh;data source=zymis;password=bgzdh2005"; 有什么不对吗?
    在Page_Load里连接到oracle是没问题的呀;就是初始化页面中的一些控件时从库里提出数据来初始化的,初始化控件是好好的,怎么会Connectstr 有问题啊?
      

  8.   

    终于自己解决了;问题的关键在于Oracle日期转换函数(将字符串转换为日期: to_date('2005-04-29','yyyy-mm-dd'))。
     将字符串格式化为日期型格式时用 Convert.ToDateTime(TextBox5.Text).ToString("yyyy-MM-dd")。代码如下:void Button1_Click(object sender, EventArgs e) {
      string Connectstr = "Provider=msdaora;user id=bgzdh;data source=zymis;password=bgzdh2005";
      OleDbConnection Connection = new OleDbConnection(Connectstr);
      string tit="",aut="",aun="",edt="",typ="",med="",posD="",zyD="",ytD="",tvD="",bsD="",rem="";
      tit=TextBox1.Text;
      aut=TextBox2.Text;
      aun=TextBox3.Text;
      edt=TextBox4.Text;
      typ=DropDownList1.SelectedItem.Text;
      med=DropDownList2.SelectedItem.Text;
      posD=TextBox5.Text;
      zyD=TextBox6.Text;
      ytD=TextBox7.Text;
      tvD=TextBox8.Text;
      bsD=TextBox9.Text;
      rem=TextBox10.Text;  OleDbCommand Command = new OleDbCommand("INSERT INTO XC_DWTG(TITLE, AUTHOR, AUTH_UNIT, EDITOR, TYPE, MEDIA, POST_DATE, ZY_DATE, YT_DATE, TV_DATE, BS_DATE, REMARK) VALUES ('"+tit+"','"+aut+"','"+aun+"','"+edt+"','"+typ+"','"+med+"',to_date('"+posD+"','yyyy-mm-dd'),to_date('"+zyD+"','yyyy-mm-dd'),to_date('"+ytD+"','yyyy-mm-dd'),to_date('"+tvD+"','yyyy-mm-dd'),to_date('"+bsD+"','yyyy-mm-dd'),'"+rem+"')",Connection);
      Connection.Open();
      Command.ExecuteNonQuery();
      Connection.Close();
    }
    非常感谢各位高人的指点!