-1

私は新しいC#およびASP.NET開発者です。私は自分の会社のために簡単なイントラネット予約管理システムを開発しています。イベントの前にユーザーが予約しているかどうかをシステムに確認してもらいたい。

私は次のデータベース設計を持っています:

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

これまでに行ったことは、UserID(ユーザーが[予約]ボタンをクリックしたとき)がUsersテーブルにあるかどうかを確認することです。そうでない場合、彼はデータベースに自動的に追加されます。次に、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 に答える