在我的SQL Server我有测试,其中只包含三行一个非常简单的表: ID,Date和Hours(varchar,DateTime,varchar)。
ID
Date
Hours
varchar
DateTime
SQL中的DateTime格式类似于:yyyy-MM-dd HH:mm:ss.fff。
yyyy-MM-dd HH:mm:ss.fff
C#中的DateTime格式类似于:yyyy-dd-MM HH:mm:ss.fff。
yyyy-dd-MM HH:mm:ss.fff
我使用以下代码获取C#DateTime格式:
string ddd = "2012-10-10 00:00:00.000"; dt1 = DateTime.ParseExact(ddd, "yyyy-MM-dd HH:mm:ss.fff", null);
如果我尝试将其放入,yyyy-dd-MM则会出现错误:
yyyy-dd-MM
日历不支持由字符串表示的DateTime。
在我的C#应用程序中,我正在尝试查找破损日期之间的总小时数。我有点想使用它了,但是它只适用于01到12之间的日期。
因此,从2012-01-10到2012-10-10(十天)会给我正确的数据库总小时数。
2012-01-10
2012-10-10
但是,当我写2012-01-10来2012-14-10(14天)我得到一个错误:
2012-14-10
从char数据类型到datetime数据类型的转换导致超出范围”
先感谢您。
PS。您能建议一种更简单的日期获取方式吗?
MySQL查询
string CommandText = "SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";
我已经解决了问题,但没有解决方案。
问题是SQL数据库查看格式,并要求yyyy-MM-dd,但是C#只能发送yyyy-dd-MM。
为什么不能ParseExact()yyyy-MM-dd?
ParseExact()
之所以出现此错误,是因为您的C#应用程序将日期2012-14-10视为14th月份,10th日期和2012th year。白天和一年的工作都可以找到,但是月份却找不到。此外,不要尝试更改C#应用程序查看日期的方式,这是基于系统的文化。
14th
10th
2012th year
您对如何 定义 一个DateTime对象以及如何 显示 一个对象感到困惑。
由于您将日期存储为DateTimeSQL,因此没有充分的理由让我相信您将需要进行 任何 形式的解析。考虑下面的代码示例。
var dataTable = new DataTable(); var dataAdapter = new SqlDataAdapter("SELECT * FROM YourTable", "{connection string}"); dataAdapter.Fill(dataTable); var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.
让我们以您的示例查询为例:
“ SELECT * FROM date_test WHERE id =‘4’AND日期介于’” + dt1 +“’AND’” + dt2 +“’”;
让我们对其进行修复,请考虑以下示例:
var dataTable = new DataTable(); var dataAdapter = new SqlDataAdapter("SELECT * FROM date_test WHERE id = @ID AND date BETWEEN @StartDate AND @EndDate", "{connection string}"); dataAdapter.SelectCommand.Parameters.AddWithValue("@ID", "4"); dataAdapter.SelectCommand.Parameters.AddWithValue("@StartDate", new DateTime(2012, 10, 1)); dataAdapter.SelectCommand.Parameters.AddWithValue("@EndDate", new DateTime(2012, 10, 14)); dataAdapter.Fill(dataTable); var yourDate = dataTable.Rows[0]["Date"]; <=== the type will be DateTime, simple.