2012-08-13 17 views
-1

我是一名新的C#和ASP.NET開發人員。我正在爲我的公司開發一個簡單的Intranet預訂管理系統。我希望系統在事件發生前檢查用戶是否有預約。如何檢查用戶在點擊事件中是否有預約?

我有以下的數據庫設計:

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

我做了什麼至今正在檢查用戶名,如果它是在用戶表或沒有(當用戶點擊預訂按鈕)。否則,他將自動添加到數據庫。現在我想通過檢查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(); 
      } 
     } 



    } 

回答

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(); 
    } 
+0

感謝您的幫助。對此,我真的非常感激。 – 2012-08-14 04:24:36

1

您的預訂表中有用戶ID的外鍵

Booking Table: BookingID, EventID, UserID 

你可以得到的記錄數針對特定用戶名,如果計數大於0,這表示用戶已預訂。您的查詢可能是:

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

其中@UserID是您要使用比較UserID,並UserBookings會給你

+0

感謝您的幫助,但我怎麼會知道他在事件預訂,他點擊了它預定的座位在它呢? – 2012-08-13 07:39:09

+0

在這種情況下,您也可以與EventID進行比較,因此您的查詢應該是:'從用戶ID = @UserID和EventID = @ EventID'的Bookings中選擇count(*)作爲UserBookings,您只需將兩個條件案例中,您的預訂表中包含了所有內容 – Habib 2012-08-13 07:40:20

+0

感謝您的幫助,我非常感謝。你能把它與我的上面的代碼結合起來嗎?我知道我問得太多,但是因爲我是一名新開發人員,而且我正在爲此苦苦掙扎。提前致謝。 – 2012-08-13 07:44:25

相關問題