小弟最近在苦练C#,苦于无源码练兵,最近终于搜到一C#源码,可以编译通过....但原程序是使用SQL数据库,小弟由于条件的限制,暂时只能用access,所以对源码进行大修改,全部改成oledb的,然后就出现这样的错误:标准表达式类型不匹配!!!
    特登出出错的关键语句,望各位GGJJ们多多指点啦:)
DateTime mytime=new DateTime();
mytime=Convert.ToDateTime(now.Date);
         mysql="SELECT COUNT(huifu_id) FROM huifu WHERE shijian<'"+mytime+"'and        shijian>'"+now.Date.AddDays(-1)+"'";
mycomm=new OleDbCommand(mysql,myconn);
reader=mycomm.ExecuteReader();  到底是怎么回事呢?是因为OleDbCommand跟SqlCommand对日期型的要求不一样?我在access里的huifu里的shijian字段是就是日期型的,格式是常规日期;如果要使这个错误不出现 ,要作哪些修改呢??

解决方案 »

  1.   

    mysql="SELECT COUNT(huifu_id) FROM huifu WHERE shijian<'"+mytime+"'and        shijian>'"+now.Date.AddDays(-1)+"'";中有些地方连接在一块了.  像mytime+"'and   中'和and 连在一块了
      

  2.   

    DateTime mytime=DateTime.Today;mysql="SELECT COUNT(huifu_id) FROM huifu WHERE shijian<'"+mytime.ToString("yyyy-MM-dd")+"' and  shijian>'"+DateTime.Today.AddDays(-1).ToString("yyyy-MM-dd")+"'";或:
    mysql="SELECT COUNT(huifu_id) FROM huifu WHERE shijian<@d1 and  shijian>@d2"然new OleDbParameter("@d1",mytime); new ......再把参数Add进去执行.
      

  3.   

    还是用参数吧,让ADO.NET去处理格式问题.
      

  4.   

    楼主的代码很容易被SQL注入攻击,建议用存储过程或者用参数。
      

  5.   

    按照各位大哥的建议,我利用参数的方式进行处理,现在出现一个新的问题,出现了这样的错误:语法错误 (操作符丢失) 在查询表达式 'shijian < @mytime and shijian > @ mytime1' 中;
    我修改的代码如下:
    DateTime mytime=new DateTime();
    mytime=Convert.ToDateTime(now.Date);
    mysql="select count (huifu_id) from huifu where shijian < @mytime and shijian > @ mytime1 ";
    mycomm=new OleDbCommand(mysql,myconn);
    mycomm.Parameters.Add(new OleDbParameter("@mytime", OleDbType.DBTimeStamp)).Value=mytime;
        mycomm.Parameters.Add(new OleDbParameter("@mytime1", OleDbType.DBTimeStamp)).Value=now.Date.AddDays(-1);
    reader=mycomm.ExecuteReader();注:reader是全局变量,前面已经声明过了真不知道我的语法是不是有错,不过我以前也有过这个进行sql的操作,没有发生这样的错误,不知道问题出在哪里,望各位GGJJ再次指正!!
      

  6.   

    LE DB .NET 提供程序不支持将参数传递给 OleDbCommand 调用的 SQL 语句或存储过程的命名参数。在这种情况下,必须使用问号 (?) 占位符。
    public void CreateMyOleDbCommand(OleDbConnection myConnection,
    string mySelectQuery, OleDbParameter[] myParamArray) {
       OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
       myCommand.CommandText = "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
       myCommand.Parameters.Add(myParamArray);
       for (int j=0; j<myParamArray.Length; j++)
       {
          myCommand.Parameters.Add(myParamArray[j]) ;
       }
    }
      

  7.   

    如果使用拼接sql语句,access中时间前后必须加#