Sql server 将varchar数据类型转换为datetime数据类型导致值超出范围
我试图从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询值传递。我一直收到各种各样的错误消息,我想是因为错误的数据类型 我在这里做错了什么 请帮忙 pSql server 将varchar数据类型转换为datetime数据类型导致值超出范围,sql-server,visual-studio-2010,c#-4.0,Sql Server,Visual Studio 2010,C# 4.0,我试图从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询值传递。我一直收到各种各样的错误消息,我想是因为错误的数据类型 我在这里做错了什么 请帮忙 p 我知道SQL datetime类型的日期范围是从1753年1月1日到9999年12月31日 而.NET datetime的最小值为00:00:00.00000000101年1月1日 我建议你检查一下你是否在范围内 这意味着,如果没有使用SQL最小值启动日期时间选择器,它可能会返回无效的SQL日期。我遇到了类似的问题,但我的解决方法很简单
我知道SQL datetime类型的日期范围是从1753年1月1日到9999年12月31日 而.NET datetime的最小值为00:00:00.00000000101年1月1日 我建议你检查一下你是否在范围内
这意味着,如果没有使用SQL最小值启动日期时间选择器,它可能会返回无效的SQL日期。我遇到了类似的问题,但我的解决方法很简单: 而不是
+ datumVan.ToShortDateString() + "' and '" + datumTot.ToShortDateString() +
我改成
+ datumTot.ToShortDateString() + "' and '" + datumVan.ToShortDateString() +
如果这有帮助的话,试试看
另外,您的日期是否正在使用ToSortDateString()转换为字符串,但表中日期的格式是什么
可能您也可以尝试以下查询:
从my_表中选择*,其中按日期描述顺序在转换(“+ToSortDateString()+””作为日期)和转换(“+datumTot.ToSortDateString()+””作为日期)之间转换(日期作为日期)"; 不要将日期视为字符串。就这么简单,一开始就避免将它们转换为字符串,这样就省去了一大堆麻烦 因此,不是:
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日期时间值的问题。我还建议在SQL语句中使用参数,不要直接向查询插入值。
adapter.SelectCommand.Parameters.AddWithValue("@Van",datumVan);
adapter.SelectCommand.Parameters.AddWithValue("@Tot",datumTot);