2016-08-03 33 views
1

我想创建一个时间表页面,员工可以插入他们的休假时间,并删除该特定日期范围内的数据。如何删除两个日期范围之间的日期而不删除整行?

我有两个文本框是针对日期范围的,我尝试使用下面的代码,但它只会在日期范围匹配时删除整行,而不是中间数据。帮帮我?

protected void Delete_Click(object sender, EventArgs e) 
    { 
     if (StartTextBox.Text == "" || EndTextBox.Text == "") 
     { 
      ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Please Enter a Date Range to Submit for employee.');", true); 
     } 
     string find = "DELETE FROM Schedule where start >= @DateTo AND end_date <= @DateFrom"; 

     SqlCommand cmd = new SqlCommand(find, con); 
     cmd.Parameters.AddWithValue("@DateTo", SqlDbType.NVarChar).Value = StartTextBox.Text; 
     cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.NVarChar).Value = EndTextBox.Text; 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

     ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Time-off submitted successfully!');", true); 
    } 
+0

什么是数据行是什么样子?我无法理解。 – Cameron

+1

我认为你有你的参数倒退。你需要'start> = @DateFrom AND end_date <= @ DateTo'。 –

+0

你的意思是“不是中间数据”? – Rahul

回答

2

您正在使用nvarchar作为数据类型。 <和>的行为不是你所期望的。

考虑更改列类型日期时间

之后,你可以更改代码以:

cmd.Parameters.AddWithValue("@DateTo", SqlDbType.DateTime).Value = DateTime.Parse(StartTextBox.Text); 
cmd.Parameters.AddWithValue("@DateFrom", SqlDbType.DateTime).Value = DateTime.Parse(EndTextBox.Text); 
+0

感谢您的帮助,但它仍然只是删除整行。 –

+0

更多示例:如果我有一个起始行A:07-27-16和end_date是:08-04-16 ...我想要删除暂停日期(07-27-16开始和08 -01-16 for end_date)IN-BETWEEN已存在的行A.是否有删除和更新行的方法,所以在插入暂停日期行A现在是:08-02-16用于启动和08- 04-16为end_date? –

+0

它应该删除'整行'。也就是说,每一行都与您的'where'子句匹配。 'schedule'表中的任何一行上的值为'start'的值,或者与您的参数'DateTo'相同或相同,并且在'DateFrom'参数之前或等于'DateFrom'参数的列'end_date'上的值。这不是你想要达到的目标吗? –