Sql server 将varchar数据类型转换为datetime数据类型导致值超出范围

Sql 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日期。我遇到了类似的问题,但我的解决方法很简单

我试图从数据库中读取数据,并将从日期时间选择器中选择的日期作为查询值传递。我一直收到各种各样的错误消息,我想是因为错误的数据类型

我在这里做错了什么

请帮忙

p


我知道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);