用Access做数据库碰到了这个问题,代码如下:Insert时正常,但是查询时出错。相关的语句代码如下://Insert部份private const string Insert_Agent = "INSERT INTO AgentInfo VALUES(@AgentID , @UserName, @AddDate, @AgentStatus, @AgentType)";
public int InserAnAgent(AgentInfo agent)
{
// TODO:  添加 Agent.InserAnAgent 实现
int result; OleDbParameter[] parms = {
AccessHelper.MakeInParam(PARM_AgentID,OleDbType.VarChar,50,agent.AgentID),
AccessHelper.MakeInParam(PARM_UserName,OleDbType.VarChar,50,agent.AgentUserName),
AccessHelper.MakeInParam(PARM_AddDate,OleDbType.DBDate,20,agent.AgentAddDate),
AccessHelper.MakeInParam(PARM_AgentStatus,OleDbType.Integer,16,agent.AgentStatus),
AccessHelper.MakeInParam(PARM_AgentType,OleDbType.VarChar,50,agent.AgentType)
 }; try
{
result = AccessHelper.ExecuteNonQuery(Insert_Agent,parms);
}
catch(Exception ex)
{
throw ex;
}
return result;
}//Select部份出错,代码如下:
private const string Select_Agents_ByAddDate = "SELECT AgentID,UserName,AgentStatus,AgentType FROM AgentInfo WHERE               AddDate = '#' +@AddDate + '#'";public IList GetAgentsInfoByAddDate(DateTime addDate)
{
// TODO:  添加 Agent.GetAgentsInfoByAddDate 实现
IList agentList = new ArrayList();
OleDbParameter[] parms = {
               AccessHelper.MakeInParam(PARM_AddDate,OleDbType.DBDate,20,addDate)  //语句中参数换成具体时间如#2008-10-16#就正确,这边应该是出错的地方
 };   using(OleDbDataReader rdr = AccessHelper.ExecuteReader(CommandType.Text,Select_Agents_ByAddDate,parms))
{

while(rdr.Read())
{
agentList.Add(new AgentInfo(rdr.GetString(0),rdr.GetString(1),addDate,rdr.GetInt32(2),rdr.GetString(3))); 
}
}
return agentList;
}

解决方案 »

  1.   

    AccessHelper.MakeInParam(PARM_AddDate,OleDbType.DBDate,20,addDate) 改成
    AccessHelper.MakeInParam(PARM_AddDate,OleDbType.DBDate,20,addDate.ToShortDateString())之类的也还是不行。 
      

  2.   

    只好改成下面这种方式了:string str = "SELECT AgentID,UserName,AgentStatus,AgentType FROM AgentInfo WHERE AddDate = # "+addDate.ToShortDateString()+"#";
    using(OleDbDataReader rdr = AccessHelper.ExecuteReader(CommandType.Text,str,(OleDbP..)null))  {

    while(rdr.Read())
    {
    agentList.Add(new AgentInfo(rdr.GetString(0),rdr.GetString(1),addDate,rdr.GetInt32(2),rdr.GetString(3)));  }
    }===============================================
    这样是肯定可以,也测试通过。但还是不清楚之前的方式错在哪。