刚学asp.net。想写个留言本,可在插入数据的时候老是insert语句出错
以下是关键代码:acess数据库,id,name,email,topic,content,time 分别为数值,文本,文本,文本,文本,常规日期类型。string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
                                                                          ConnectionString+="Data Source="+Server.MapPath("guestbook.mdb");
OleDbConnection conn=new OleDbConnection(ConnectionString);
conn.Open();
         //生成留言编号,如果数据库中没有留言,则为1,否则编号为最大编号加1。id为主键,数值类型。
 int topicId;
OleDbCommand cmd=conn.CreateCommand();
         cmd.CommandText="select MAX(id) AS maxID from book ";
 OleDbDataReader myReader=cmd.ExecuteReader();
         myReader.Read();
if (IsDBNull(myReader["maxID"]))
{
topicId=1;
}else{
topicId=(int)myReader["maxID"]+1;
}
    myReader.Close();
 cmd.CommandText="insert into book (name,email,topic,content)values(?,?,?,?);  
 //cmd.CommandText="insert into book (id,name,email,topic,content,time)values(?,?,?,?,?)" ; 
//cmd.Parameters.Add("@topicid",OleDbType.Integer ).value=topicId

cmd.Parameters.Add("@name",name.Text);
cmd.Parameters.Add("@email",email.Text);
                                                                         cmd.Parameters.Add("@topic",topic.Text);
 cmd.Parameters.Add("@content",content.Text);
 //cmd.Parameters.Add("@time",OleDbType.DBTimeStamp).Value =System.DateTime.Now;
int affectedRecords = (int)cmd.ExecuteNonQuery();
  conn.Close();
  conn.Dispose();
if(affectedRecords==1)
 {
                                                                                    Response.Redirect("index.aspx");
  }else{
                                                                                     Response.Redirect("error.aspx);
}
当我直接获取留言人,留言人email,留言主题,留言内容时,即使用
 cmd.CommandText="insert into book (name,email,topic,content)values(?,?,?,?);
时,可以成功完成任务并返回首页。但是现在想同时插入留言编号,及留言日期,改怎么做呢?
我使用上面//部分的语句,但是老是说insert语句出错?
请各位帮帮忙啊?到底该怎么写啊?另外书上说access数据库中sql语句参数为"?",可我还是看到一些代码里用@参数名呢?到底怎么用啊?

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/4040/4040806.xml?temp=.1184656
    这是刚才发的,问题是一样的
      

  2.   

    如果你的ID是自增列就不能给他付值了,他会自动加,如果不是的话。可以加。。还有你的时间添加的是cmd.Parameters.Add("@time",OleDbType.Date).Value =System.DateTime.Now;
      

  3.   

    cmd.CommandText="insert into book (id,name,email,topic,content,time)values(?,?,?,?,?)" 个数不一样,前面是6个,后面是5个,肯定会报错
      

  4.   

    如果你的ID是自增列就不能给他付值了,他会自动加,如果不是的话。可以加。。还有你的时间添加的是cmd.Parameters.Add("@time",OleDbType.Date).Value =System.DateTime.Now;
    还有你还是用 @ 这个比较好我只在 oracle里用过?