按下预订按钮
本文关键字:按钮 | 更新日期: 2023-09-27 18:26:52
我正在创建一个班级预订网站,创建按钮时遇到问题。我想让客户在两个文本框中插入两个详细会话,会话类型为"class"或"workshop"和日期&时间,他们将能够从显示的DataGridView中看到这些信息。
一旦他们点击"保留"按钮,按钮将运行一个查询,将所选会话从会话表添加到保留表。然而,我的代码执行时没有错误,但不会更新"预订"表。
这是我的代码:
OleDbConnection myConnection = GetConnection();
OleDbCommand cmd = myConnection.CreateCommand();
string query = "select COUNT(*) from [Yoga-Session] where [session type] = '" + txt_type.Text + "' and duration = '" + txt_datetime.Text + "';";
OleDbCommand command = new OleDbCommand(query, myConnection);
myConnection.Open();
int rows1 = (Int32)command.ExecuteScalar();
if (rows1 >= 1)
{
cmd = new OleDbCommand("Select session_id from [yoga-session] where [session type] = '" + txt_type.Text + "' and duration = '" + txt_datetime.Text +"';",myConnection);
int classId = (Int32)command.ExecuteScalar();
cmd = new OleDbCommand("select client_id from client where name = '" + Session["[name]"] + "';", myConnection);
int clientID = (Int32)command.ExecuteScalar();
string query1 = "insert into reservation (session_id, client_id, client_name) values ('" + classId + "','" + clientID + "','" + Session["[name]"].ToString() + "');";
cmd = new OleDbCommand(query1, myConnection);
cmd.ExecuteNonQuery();
Response.Write("Reservation successful");
Response.Redirect("reservation.aspx");
myConnection.Close();
}
}
}
int classId = (Int32)cmd.ExecuteNonQuery();
int clientID = (Int32)cmd.ExecuteNonQuery();
您需要使用cmd.ExecuteScalar()
来获取session_id
和client_id
的值。ExecuteNonQuery
不返回任何受SQL查询影响的行。
也看看@Sherantha指出了什么。
ExecuteNonQuery()
不适用于SELECT命令。要从SELECT命令中获取字段值,我们需要使用ExecuteScalar()
。
尝试更换;
int rows1 = (Int32)command.ExecuteScalar();
在我写出真正的答案之前只是一个小标题(因为我没有代表可以评论)
首先:使用准备好的报表。它们极大地减少了键入SQL查询时的错误,也是在现实世界中防止SQL注入攻击的一种方法。
第二:虽然在大多数数据库类型中并不真正需要,但建议在代码中严格统一命名约定。
除此之外,我现在就要找到真正的答案了。
在代码中,我假设classID
和clientID
是整数,但在您的代码中,由于"字符的原因,它们似乎被解析为字符串。插入整数时不要使用字符。
编辑:[会话类型]是[会话类型】吗?
您应该使用query1而不是query。
string query1 = "insert into reservation (session_id, client_id, client_name) values ('" + classId + "','" + clientID + "','" + Session["[name]"].ToString() + "');";
cmd = new OleDbCommand(query1, myConnection);// not query but query1
cmd.ExecuteNonQuery();
Response.Write("Reservation successful");
PS:使用sql数据读取器选择数据。
cmd = new OleDbCommand("Select session_id from [yoga-session] where [session type] = '" + txt_type.Text + "' and duration = '" + txt_datetime.Text +"';",myConnection);
SqlDataReader rdr = cmd.ExecuteReader();
int classId = 0;
while (rdr.Read())
{
clientID = Convert.ToInt32(rdr["session_id"]);
}