首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL server DateTime和C# DateTime

SQL server DateTime和C# DateTime
EN

Stack Overflow用户
提问于 2012-09-24 11:09:30
回答 2查看 21.3K关注 0票数 5

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

SQL中的DateTime格式类似于:yyyy-MM-dd HH:mm:ss.fff

DateTime格式在C#中类似于:yyyy-dd-MM HH:mm:ss.fff

我使用以下代码获取C# DateTime格式:

代码语言:javascript
复制
 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 (10天)一样,从数据库中得到的总时数将是正确的。

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

将char数据类型转换为日期时间数据类型会导致超出范围的“

提前谢谢你。

PS。你能给我一个更简单的约会方法吗?

mySQL查询

代码语言:javascript
复制
string CommandText = "SELECT * FROM date_test WHERE id = '4' AND date BETWEEN '" + dt1 + "' AND '" + dt2 + "'";

我已经解决了问题,但没有找到解决办法。

问题是,SQL数据库查看格式,并希望使用yyyy,但是C#只能发送yyyy。

为什么ParseExact()不能做yyyy dd?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-24 11:24:28

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

出现此错误是因为您的C#应用程序将日期2012-14-10视为表示14th月、10th日和2012th year的日期。日复一日,年复一年的工作找不到,但月份却找不到。而且,不要试图改变C#应用程序查看日期的方式,这是基于系统文化的。

您混淆了如何定义DateTime对象和如何显示对象。

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

代码语言:javascript
复制
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.

添加参数

让我们来看看您的示例查询:

“从date_test中选择*,其中id = '4‘,日期介于’+ dt1 +‘’和‘’+ dt2 + '”之间;

让我们稍微修正一下,考虑下面的例子:

代码语言:javascript
复制
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.
票数 3
EN

Stack Overflow用户

发布于 2012-09-24 11:26:55

你在为SQL注入做一个完美的准备。

还可以看看这里。有一个参数化查询的例子。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12563795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档