2012-09-19 70 views
0

我试图从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询。我一直在收到所有类型错误的错误消息,我认为这是错误的数据类型。将varchar数据类型转换为日期时间数据类型导致超出范围值

我在这里做错了什么?

请帮忙。

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

回答

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的问题服务器日期时间值。

+0

非常感谢,它工作完美... – Predo

1

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

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

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

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

+0

我也建议在你的SQL语句中使用参数,而不是直接向查询中插入值。 – AMember

0

我遇到类似的问题,但我的修补程序很简单:

而不是

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

我改

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

试试看吧,如果这有助于。

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

可能是你可以试试下面的查询,以及:

SELECT * FROM MY_TABLE地方之间CAST(日截止日)CAST( ' “+ ToShortDateString()+”' AS DATE)和CAST('” + datumTot.ToShortDateString()+“” AS DATE)按日期倒序”;

相关问题