2

我有一个日期格式的文本框dd/MM/yyyy,我想将其转换为yyyy-MM-dd将其插入数据库的格式。

我试过

Convert.DateTime/DateTime.ParseExact 

但它总是给我系统的默认日期格式。

我不知道在 C# 中转换它的任何其他方法...

4

5 回答 5

13

您根本不应该将其转换为字符串将其插入数据库。(我对推荐这种方法的所有其他答案感到惊讶。)

相反,您应该使用参数化 SQL,并将参数的值设置为DateTime您获得的值。无论如何,您都应该使用参数化 SQL以避免 SQL 注入攻击,并保持代码和数据分离。它避免了不必要的字符串转换(每一个都是潜在的痛点)这一事实是另一个好处。

您问题的这一部分表明您有一个基本的误解:

我使用 Convert.DateTime/DateTime.ParseExact 它总是给我系统日期格式。

这些方法会给你一个DateTime. ADateTime没有格式。当您打电话时,ToString您只会获得当前文化的默认格式,但这不是价值的一部分。就像数字一样 - 16 和 0x10 是同一个数字,并且int不“知道”它是十进制还是十六进制;这是一个毫无意义的概念。

所有这一切都超出了您当前的问题,试图保持您的代码库在类型方面保持清洁。您应该尽可能多地以最合适的形式保存数据并确保您在所有方面都准确理解这些数据的含义。转换为其他类型的通信(如字符串)应仅在 API/系统边界处进行,并且尽可能避免(例如,在这种情况下使用参数化 SQL)。

于 2012-08-24T05:58:04.287 回答
3

有许多方法,但没有一个比使用参数化 SQL 更有用和合乎逻辑。这是维基百科页面!有关参数化 SQL 语句的更多信息,请访问此编码恐怖页面!

于 2012-08-24T06:17:04.373 回答
2

实际上没有必要改变它。这只是显示格式,但里面的“日期时间”对象保持不变。根据您要插入的方式,您可以使用:

string dateValue = DateTime.Now.ToString("yyyy-MM-dd");

并将其插入到您的查询字符串中。

编辑

但正如 Jon Skeet 评论的那样,永远不应该像这样手动构建查询字符串。像参数化 SQL 或使用 NHibernate 这样更简洁的方法应该是您的首要关注点。

于 2012-08-24T05:57:14.170 回答
1

希望这有效!

DateTime 变量= Convert.ToDateTime(你的日期);

于 2017-06-09T07:50:19.523 回答
-1

你可以像这样格式化它:

string sDateTime = Convert.ToDateTime(txtTextBox.Text).ToString("yyyy-MM-dd");

编辑

在准备信息以输入数据库时​​,有很多方法可以给猫剥皮。我在这里的解决方案直接回答了 OP,但是我非常承认有更好的方法来做到这一点。

我建议也阅读 Jon Skeet 在此页面上的帖子,因为他提出了一些关于 OP 方法的非常有效的观点。

希望有帮助。

于 2012-08-24T05:57:29.330 回答