一尘不染

SQL Server DateTime和C#DateTime

sql

在我的SQL Server我有测试,其中只包含三行一个非常简单的表:
IDDateHoursvarcharDateTimevarchar)。

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则会出现错误:

日历不支持由字符串表示的DateTime。

在我的C#应用​​程序中,我正在尝试查找破损日期之间的总小时数。我有点想使用它了,但是它只适用于01到12之间的日期。

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

但是,当我写2012-01-102012-14-10(14天)我得到一个错误:

从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?


阅读 240

收藏
2021-03-10

共1个答案

一尘不染

日历不支持由字符串表示的DateTime。

之所以出现此错误,是因为您的C#应用​​程序将日期2012-14-10视为14th月份,10th日期和2012th year。白天和一年的工作都可以找到,但是月份却找不到。此外,不要尝试更改C#应用程序查看日期的方式,这是基于系统的文化。

您对如何 定义 一个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.
2021-03-10