1

在 winform 应用程序中,我有一个用于显示数据库值的 datagridview。我使用以下代码查看两个特定日期时间之间的结果,例如 2010 年 6 月 5 日和 2010 年 7 月 5 日之间的结果,但它只显示在这些日期时间中完全更新的行。我的意思是它只是向我显示具有确切注册日和完成日的行。我想看看这些时间之间的所有结果。

private void button1_Click(object sender, EventArgs e)
    {
        sql = new SqlConnection(@"Data Source=PC-PC\PC;Initial Catalog=Test;Integrated Security=True");
        adapter = new SqlDataAdapter("select EntryID,Name,FamilyName,Registrationday,Finishday,Fee from Entry where Registrationday =@Registrationday AND Finishday =@Finishday", sql);
        adapter.SelectCommand.Parameters.AddWithValue("@Signday", Convert.ToDateTime(textBox1.Text).ToShortDateString());
        adapter.SelectCommand.Parameters.AddWithValue("@Finishday", Convert.ToDateTime(textBox2.Text).ToShortDateString());
        dt = new DataTable();
        adapter.Fill(dt);
        dataGridView1.DataSource = dt;
    }
4

4 回答 4

2

对于与您的间隔重叠的行:

Registrationday <= @Finishday AND Finishday >= @Registrationday 

这匹配以下所有行:

-------R-------F-----------
    *------------*
     *------*
       *---*
          *---*
            *------*

对于完全包含在您的区间内的行:

Registrationday >= @Registrationday AND Finishday <= @Finishday 

这仅匹配以下行:

-------R-------F-----------
       *---*
          *---*
于 2012-05-06T18:53:23.337 回答
1

为范围指定 <= 和 >=

 Registrationday >=@Registrationday AND Finishday <=@Finishday
于 2012-05-06T18:53:20.427 回答
1

您可以使用BETWEEN

SELECT  EntryID, Name, FamilyName, Registrationday, Finishday, Fee 
FROM    [Entry] 
where Registrationday BETWEEN @Registrationday AND  @Finishday 

尽管目前尚不清楚您为什么要过滤Finishday

请注意,您不应将 aString作为参数传递,而应将 aDateTime

adapter.SelectCommand.Parameters.AddWithValue("@Registrationday", Convert.ToDateTime(textBox1.Text));
adapter.SelectCommand.Parameters.AddWithValue("@Finishday", Convert.ToDateTime(textBox2.Text));
于 2012-05-06T18:54:06.217 回答
1

只需更新查询字符串

adapter = new SqlDataAdapter("select EntryID,Name,FamilyName,Registrationday,Finishday,Fee from Entry where Registrationday >=@Registrationday AND Finishday <=@Finishday", sql);
于 2012-05-06T18:56:34.943 回答