刚学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语句参数为"?",可我还是看到一些代码里用@参数名呢?到底怎么用啊?
以下是关键代码: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语句参数为"?",可我还是看到一些代码里用@参数名呢?到底怎么用啊?
这是刚才发的,问题是一样的
还有你还是用 @ 这个比较好我只在 oracle里用过?