将varchar数据类型转换为日期时间数据类型会导致超出范围的值

时间:2012-09-19 11:00:52

标签: sql-server visual-studio-2010 c#-4.0

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

我在这里做错了什么?

请帮忙。

P

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

3 个答案:

答案 0 :(得分:1)

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

.NET datetime min值为00:00:00.0000000,0001年1月1日。

我建议你检查一下你是不是在范围之间。

这意味着如果您的日期时间选择器未使用SQL min值启动,则可能会返回无效的SQL日期。

答案 1 :(得分:0)

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

而不是

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

我改为

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

尝试一下,如果有帮助的话。

此外,您的日期是通过使用ToShortDateString()转换为字符串,但是您的日期格式是什么格式?

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

从my_Table中选择*,其中CAST(日期AS DATE)在CAST('“+ ToShortDateString()+”'AS DATE)和CAST('“+ datumTot.ToShortDateString()+”'AS DATE)之间按日期排序desc “;

答案 2 :(得分: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日期时间值的问题。