我正在尝试从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询的值传递。我认为,我不断收到因错误数据类型而导致的各种错误消息。
我在这里做错了什么?
请帮忙。
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 :(得分: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日期时间值的问题。