SQL Server DateTime和C#DateTime

在我的SQL服务器上,我有一个非常简单的测试表,它只包含三行: IDDateHours 。( varcharDateTimevarchar )。

SQL中的DateTime格式如下: yyyy-MM-dd HH:mm:ss.fff

C#中的DateTime格式如下: 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我会收到错误:

日历时间由字符串表示,日历不支持。

在我的C#应用​​程序中,我正在尝试查找修整日期之间的总小时数。 我有点工作,但它只适用于01到12之间的日期。

因此,从2012-01-102012-10-10 (十天)将从数据库中给我正确的总小时数。

但是当我写2012-01-102012-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?

日历时间由字符串表示,日历不支持。

由于您的C#应用​​程序将2012-14-10日期视为第14th个月, 10th天和10th 2012th year ,因此会出现此错误。 找工作的日期和年份,但月份没有。 此外,不要尝试更改C#应用程序查看日期的方式,这取决于系统的文化。

您会混淆如何定义 DateTime对象以及如何显示它。

由于您将日期存储为SQL中的DateTime ,因此我没有充分的理由相信您需要进行任何类型的解析。 请考虑以下代码示例。

 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 date BETWEEN'”+ 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. 

您正在为SQL注入做好准备。
还看这里 。 有一个参数化查询的例子。