2016-03-06 82 views
-1

我正在嘗試使用SQL Server Express數據庫在asp.net中創建度假計劃。防止雙重預訂ASP.NET C#

當你添加一個假期時,你必須添加一個begintime,endtime,當然你是誰。

有沒有辦法顯示錯誤,當已經有同一時間和同一個員工休假與他們嘗試添加。

這樣系統將防止雙休假。否則,Gridview表在同一天的兩行中顯示兩個相同的名稱。我想阻止人們重複預訂。

比方說,人A已預訂StartDate = 2016-03-06EndDate = 2016-03-10。這意味着我想阻止其他人在開始日期和結束日期之間預訂相同的StartDateEndDate,甚至不包括開始日期和結束日期之間的較早日期和日期,例如我的意思是例如2016-03-01和2016-03-06之間,2016-03-07,2016-03-08 ...因爲這些日期介於開始日期和結束日期之間。

我試圖創建一個像下面這樣的方法,然後我不知道該怎麼做。我將不勝感激任何幫助 //野老編輯插入按鈕,而不是方法:

protected void btnInsertVacation_Click(object sender, EventArgs e) 
     { 


      string cs = ConfigurationManager.ConnectionStrings["ResursplaneringConnectionString"].ConnectionString; 

      TextDateTime.Text = Calendar1.SelectedDate.ToShortDateString(); 

      using (SqlConnection con = new SqlConnection(cs)) 
      { 

       string check = "SELECT EmployeeId, StartDate, EndDate FROM vacation WHERE (EmployeeId = @EmployeeId) AND(StartDate <= @NewEndDate) AND(EndDate >= @NewStartDate)"; 
       SqlCommand cmd = new SqlCommand(check, con); 
       cmd.Parameters.AddWithValue("@EmployeeId", DropDownEmployee.SelectedValue); 
       cmd.Parameters.AddWithValue("@NewEndDate", txtStartDate.Text); 
       cmd.Parameters.AddWithValue("@NewStartDate", txtEnd.Text); 
       con.Open(); 
       using (SqlDataReader rdr = cmd.ExecuteReader()) 
       { 
        while (rdr.Read()) 

        { 
         if (rdr.HasRows) 
         { 
          Response.Write("Dubbel booking"); 
         } 

         else 

         { 
          string insertVacation = "INSERT INTO Planering (StartDate, EndDate, EmployeeId) VALUES (@StartDate, @EndDate, @EmployeeId)"; 
          SqlCommand cmd2 = new SqlCommand(insertVacation, con); 

          SqlParameter paramPlaneringStart = new SqlParameter("@StartDate", txtStartDate.Text); 
          cmd2.Parameters.Add(paramPlaneringStart); 

          SqlParameter paramPlaneringEnd = new SqlParameter("@EndDate", txtEnd.Text); 
          cmd2.Parameters.Add(paramPlaneringEnd); 

          SqlParameter paramEmployeeId = new SqlParameter("@EmployeeId", DropDownEmployee.SelectedValue); 
          cmd2.Parameters.Add(paramEmployeeId); 



          con.Open(); 
          cmd2.ExecuteNonQuery(); 

         } 


        } 
       } 
      } 
     } 

回答

2

對於一些清晰,讓我們命名你的方法NewStartDate和NewEndDate,的參數,以避免與起始日期和結束日期,我們將使用混亂用於數據庫表中的列。

你想在你的SQL查詢做的是:

SELECT EmployeeId, StartDate, EndDate FROM vacation 
WHERE 
(EmployeeId = @EmployeeId) 
AND (StartDate <= @NewEndDate) AND (EndDate >= @NewStartDate) 

嘗試繪製在一張紙上可能重疊的部分,你應該看到這將做到這一點。

如果此操作返回任何行,則不允許創建新預訂。

+0

非常感謝。防止工作正常。我直接在插入按鈕上,但插入現在不工作。我不能再INSERT了。我認爲這是與內部其他內容相關的事情。{}我做錯了什麼。我編輯了我的問題,請檢查一下我做錯了什麼。感謝您的快速回復! –

+0

現在它正在工作,再次謝謝..... –