最近,用ACCESS做数据库,开发WINFORM程序.遇到了一个很烦恼的问题.

 

                  在数据库操作层,修改,插入语句,老是报 :"标准表达式中数据类型不匹配" 的错误.

 

           因为数据安全问题,一直都用传参数的方式,不怎么好调试! 在网上看看,也没有找到好的解决方法.

 

       最后自己测试了一下,发现:

        文本+日期/时间 类型的,修改/插入 都没有问题.

 

    如果是: 文本+数字+时间/日期 类型的,且同时出现2个时间/日期类型的.则出错.

 

最后受朋友的启示,改好了:

请注意,model.Create_date.ToString() 是DATE类型的,但是ACCESS,不知道为什么还需要先将DATE转换成字符类型

然后再Convert.ToDateTime这样转换一次.

 

呵呵,就这样了!

 

 

 /// 插入一条记录
  static public bool InsertPriceContent(PriceContent model)
  {
   try
   {
    int flag = 0;
    StringBuilder strSql = new StringBuilder();
    strSql.Append("insert into BNSP_T_PRICE_CONTENT(");
    strSql.Append("rule_id,price_model_id,regulation,parent_id,is_lowclass,is_autograde,is_total,create_user_id,create_date,update_user_id,update_date)");
    strSql.Append(" values (");
    strSql.Append("@rule_id,@price_model_id,@regulation,@parent_id,@is_lowclass,@is_autograde,@is_total,@create_user_id,@create_date,@update_user_id,@update_date)");

                OleDbParameter[] oleDbParas = new OleDbParameter[] {
     new OleDbParameter("rule_id", model.Rule_id)
     ,new OleDbParameter("price_model_id",model.Price_model_id)
     ,new OleDbParameter("regulation",model.Regulation)
     ,new OleDbParameter("parent_id",model.Parent_id)
     ,new OleDbParameter("is_lowclass",model.Is_lowclass)
     ,new OleDbParameter("is_autograde", model.Is_autograde)
     ,new OleDbParameter("is_total",model.Is_total)
     ,new OleDbParameter("create_user_id",model.Create_user_id)
     ,new OleDbParameter("create_date",Convert.ToDateTime(model.Create_date.ToString()))
     ,new OleDbParameter("update_user_id", model.Update_user_id)
     ,new OleDbParameter("update_date", Convert.ToDateTime(model.Update_date.ToString()))};

                flag = acceDataProv.ExecuteNonQuery(strSql.ToString(), oleDbParas);
                return Function.ReturnIsNull(flag);
   }
   catch (Exception ex)
   {
    throw new Exception(ex.Message, ex);
   }
  }

posted on 2008-08-28 13:55  poop  阅读(2865)  评论(2编辑  收藏  举报