按下预订按钮

本文关键字:按钮 | 更新日期: 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_idclient_id的值。ExecuteNonQuery不返回任何受SQL查询影响的行。

看看@Sherantha指出了什么。

ExecuteNonQuery()不适用于SELECT命令。要从SELECT命令中获取字段值,我们需要使用ExecuteScalar()

尝试更换;

int rows1 = (Int32)command.ExecuteScalar();

在我写出真正的答案之前只是一个小标题(因为我没有代表可以评论)

首先:使用准备好的报表。它们极大地减少了键入SQL查询时的错误,也是在现实世界中防止SQL注入攻击的一种方法。

第二:虽然在大多数数据库类型中并不真正需要,但建议在代码中严格统一命名约定。

除此之外,我现在就要找到真正的答案了。

在代码中,我假设classIDclientID是整数,但在您的代码中,由于"字符的原因,它们似乎被解析为字符串。插入整数时不要使用字符。

编辑:[会话类型]是[会话类型】吗?

您应该使用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"]);
}