-1

我是一名新的 C# 和 ASP.NET 开发人员。我正在为我的公司开发一个简单的 Intranet 预订管理系统。我希望系统检查用户是否在活动之前进行了预订。

我有以下数据库设计:

Users Table: UserID, Name
Events Table: ID, Title, Description, Location, NumberOfSeats, StartDateTime, EndDateTime, IsActive
Booking Table: BookingID, EventID, UserID

到目前为止,我所做的是检查用户 ID(当用户单击预订按钮时)是否在用户表中。如果没有,他将被自动添加到数据库中。现在我想通过检查 BookingDetails 表来检查他是否在该活动中进行了预订,但我不知道该怎么做?

你能帮我设计这个条件吗?

这是我检查用户名的方法:

protected void checkUserID(string userID) {

        int eventID = Convert.ToInt32(HiddenField1.Value);

        string NetworkID = userID;
        string Name = Service.(".......");
        string BadgeNo = Service("ffffff");
        string DepartmentCode = Service("ffffff");

        string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=RegistrationSysDB;Integrated Security=True;";

        //if the user is not in the system database, add him
        if (Security.isExisted(userID) == false)
        {
            //string connString = "Data Source=localhost\\sqlexpress;Initial Catalog=RegistrationSysDB;Integrated Security=True;";
            string insertCommand = "INSERT INTO Users (NetworkID, Name, BadgeNo, DepartmentCode) values (@NetworkID, @Name, @BadgeNo, @DepartmentCode)";

            using(SqlConnection conn = new SqlConnection(connString))
            {
                //Open DB Connection
                conn.Open();

                using(SqlCommand cmd = new SqlCommand(insertCommand, conn))
                {
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@NetworkID", NetworkID);
                    cmd.Parameters.AddWithValue("@Name", Name);
                    cmd.Parameters.AddWithValue("@BadgeNo", BadgeNo);
                    cmd.Parameters.AddWithValue("@DepartmentCode", DepartmentCode);
                    cmd.ExecuteNonQuery();
                }

                conn.Close();
            }
        }



    }
4

2 回答 2

1

您的 Booking 表具有 UserID 的外键

Booking Table: BookingID, EventID, UserID

您可以获得针对特定 UserID 的记录计数,如果计数大于0这意味着用户有预订。您的查询可能是:

Select count(*) as UserBookings from Bookings where UserID = @UserID;

你想比较@UserID的在哪里,会给你计数UserIDUserBookings

于 2012-08-13T07:23:29.653 回答
1

您还没有设置 SELECT 命令的参数,下面是修改后的代码。

    string insertBooking = "INSERT INTO BookingDetails (EventID, NetworkID) values (@EventID, @NetworkID)";
    string selectCommand = "SELECT count(*) as UserBookings FROM BookingDetails WHERE NetworkID = @NetworkID AND EventID = @EventID";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        //Open DB Connection
        conn.Open();
        using (SqlCommand cmd = new SqlCommand(selectCommand, conn))
        {
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@EventID", eventID);
            cmd.Parameters.AddWithValue("@NetworkID", NetworkID);

            if ((int)cmd.ExecuteScalar() == 0)
            {
                SqlCommand cmd2 = new SqlCommand(insertBooking, conn);
                cmd2.Parameters.Clear();
                cmd2.Parameters.AddWithValue("@EventID", eventID);
                cmd2.Parameters.AddWithValue("@NetworkID", NetworkID);
                cmd2.ExecuteNonQuery();
            }
        }
        //Close the connection
        conn.Close();
    }
于 2012-08-13T11:33:15.770 回答