0

我正在尝试从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询的值传递。我认为,由于错误的数据类型,我不断收到各种错误消息。

我在这里做错了什么?

请帮忙。

            private void buttonRetrieveData_Click(object sender, EventArgs e)
    {
        openConnection();

        //TODO: Add function te retrieve data between dates enteren in datetimepickers
        DateTime datumVan = dateTimePickerVan.Value;

        DateTime datumTot = dateTimePickerTot.Value;

        string query = "select * from my_Table where date between '" + datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() + "' order by date desc";

        DataSet dset = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(query, connection);

        SqlCommandBuilder cb = new SqlCommandBuilder(adapter);

        adapter.Fill(dset, "my_Table");

        dataGridView1.DataSource = dset;
        dataGridView1.DataMember = "my_table";

        adapter.Update(dset, "my_Table");

        closeConnection();
    }
4

3 回答 3

1

我知道 SQL datetime 类型的日期范围为:1753 年 1 月 1 日到 9999 年 12 月 31 日

.NET 日期时间最小值是 0001 年 1 月 1 日 00:00:00.0000000。

我建议你检查一下你没有落在范围之间。

这意味着如果您的日期时间选择器不是使用 SQL 最小值启动的,它可能会返回无效的 SQL 日期。

于 2012-09-19T11:11:04.867 回答
0

我遇到了类似的问题,但我的解决方法很简单:

代替

+ datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() +

我改为

+ datumTot.ToShortDateString() + "' and '" + datumVan.ToShortDateString() +   

试试看,如果这有帮助。

另外,您的日期是否正在通过使用 ToShortDateString() 转换为字符串,但是表中日期的格式是什么?

也许您也可以尝试以下查询:

select * from my_Table where CAST(date AS DATE) between CAST('" + ToShortDateString() + "' AS DATE) and CAST('" + datumTot.ToShortDateString() + "' AS DATE) order by date desc";

于 2012-09-19T13:03:07.003 回答
0

不要将日期视为字符串。就这么简单,一开始就避免将它们转换为字符串,这样就省去了一大堆麻烦。

所以,而不是:

string query = "select * from my_Table where date between '" + datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() + "' order by date desc";

改为:

string query = "select * from my_Table where date between @Van and @Tot order by date desc";

然后在命令对象中添加参数:

adapter.SelectCommand.Parameters.AddWithValue("@Van",datumVan);
adapter.SelectCommand.Parameters.AddWithValue("@Tot",datumTot);

让 ADO.Net 和 SQL Server 处理将 .NET 日期时间值转换为 SQL Server 日期时间值的问题。

于 2012-09-19T13:40:28.273 回答