[英]SQL server DateTime and C# DateTime
在我的SQL Server上,我有一个非常简单的表进行测试,该表仅包含三行: ID
, Date
和Hours
。( varchar
, DateTime
, varchar
)。
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-10
到2012-10-10
(TEN天)会给我从数据库总学时的正确的金额。
但是,当我将2012-01-10
写入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?
日历不支持由字符串表示的DateTime。
之所以出现此错误,是因为您的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日期介于'” + 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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.