使用C#将DateTime格式转换为SQL格式

时间:2013-07-02 05:51:58

标签: c# sql datetime

我正在尝试从C#中保存当前的日期时间格式,并将其转换为SQL yyyy-MM-dd HH:mm:ss之类的SQL Server日期格式,以便我可以将其用于我的UPDATE查询。

这是我的第一个代码:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

日期输出没问题,但时间总是“12:00:00”所以我将代码更改为以下内容:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.TimeOfDay.ToString("HH:mm:ss");

它给了我这个编译错误:

  

FormatException未处理

并建议我需要解析。所以我根据我在StackOverflow中的研究尝试对我的代码执行此操作:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");

但它告诉我这是一种对给定的上下文无效的方法。我试着寻找解决问题的方法,现在我被困了两个小时。我在C#中还是有点新鲜,你能帮帮我吗?

15 个答案:

答案 0 :(得分:170)

尝试以下

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

答案 1 :(得分:36)

使用标准日期时间格式“s”还将确保国际化兼容性(MM / dd与dd / MM):

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

完成选项:(代码:样本结果)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

在.NET Framework中受支持:4.6,4.5,4,3.5,3.0,2.0,1.1,1.0
参考:DateTime.ToString Method

答案 2 :(得分:6)

正确答案已经给出了“使用参数”。格式化日期并将其作为字符串传递给SQL-Server可能会导致错误,因为它取决于设置如何在服务器端解释日期。在欧洲,我们写“1.12.2012”表示2012年12月1日,而在其他国家,这可能被视为1月12日。

直接在SSMS中发布语句时,我使用的格式yyyymmdd似乎非常普遍。到目前为止,我没有遇到任何问题。

还有另一种很少使用的格式,这有点奇怪,但适用于所有版本:

select { d '2013-10-01' }

将于2013年10月1日返回。

select { ts '2013-10-01 13:45:01' }

将于10月1日,下午1:45:01返回

我强烈建议您使用参数和从不格式化您自己的SQL代码,方法是将自己开发的格式化语句片段粘贴在一起。它是SQL注入和奇怪错误的一个条目(格式化浮点值是另一个潜在的问题)

答案 3 :(得分:3)

你的第一个代码可以通过这个来实现

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 

答案 4 :(得分:3)

您的问题出现在“日期”属性中,仅将DateTime截断为日期。 您可以像这样进行转换:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!

答案 5 :(得分:3)

让我们使用内置的SqlDateTime类

new SqlDateTime(DateTime.Now).ToSqlString()

但是仍然需要检查空值。这将引发溢出异常

new SqlDateTime(DateTime.MinValue).ToSqlString()

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

答案 6 :(得分:2)

我正在寻找的答案是:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

我也了解到你可以这样做:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

可以根据需要更改myCountryDateFormat以满足更改。

请注意,标记为“此问题可能已经有答案:”实际上没有回答问题,因为您可以看到它使用“。日期”而不是省略它。这对.NET的新程序员来说非常困惑

答案 7 :(得分:1)

为什么不完全跳过字符串:

SqlDateTime myDateTime = DateTime.Now;

答案 8 :(得分:0)

您的问题出现在Date属性中,仅截断DateTime日期。您可以像这样进行转换:

DateTime myDateTime = DateTime.Now;

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

答案 9 :(得分:0)

如果您想将当前日期存储在表格中,那么您可以使用

  

GETDATE();

或将此功能作为参数

传递

例如。 &#39;更新tblname set curdate = GETDATE()其中colname = 123&#39;

答案 10 :(得分:0)

将DateTime从C#传递到SQL Server的另一种解决方案,而与SQL Server语言设置无关

假设您的“区域设置”将日期显示为dd.MM.yyyy(德国标准'104'),然后

DateTime myDateTime = DateTime.Now;
string sqlServerDate ="CONVERT("date,'"+myDateTime+"',104)"; 

根据“ 104”规则考虑映射,将C#datetime变量传递给SQL Server Date类型变量。 SQL Server日期获取yyyy-MM-dd

如果您的“区域设置”以不同的方式显示DateTime,则使用SQL Server CONVERT表中的适当匹配项

详细了解规则:https://www.techonthenet.com/sql_server/functions/convert.php

答案 11 :(得分:0)

我认为问题在于缺少两个单引号。

这是我运行到MSSMS的SQL:

WHERE checktime >= '2019-01-24 15:01:36.000' AND checktime <= '2019-01-25 16:01:36.000'

如您所见,有两个单引号,因此您的代码必须为:

string sqlFormattedDate = "'" + myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss") + "'";

在MSSQL甚至MySQL中的每个字符串都使用单引号。我希望这会有所帮助。

答案 12 :(得分:-1)

只有你把“T”+ DateTime.Now.ToLongTimeString()+'2015-02-23'

答案 13 :(得分:-1)

如果您想使用该dateTime更新表,可以使用您的sql字符串,如下例所示:

int fieldId;
DateTime myDateTime = DateTime.Now
string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString());

答案 14 :(得分:-1)

   DateTime date1 = new DateTime();

    date1 = Convert.ToDateTime(TextBox1.Text);
    Label1.Text = (date1.ToLongTimeString()); //11:00 AM
    Label2.Text = date1.ToLongDateString(); //Friday, November 1, 2019;
    Label3.Text = date1.ToString();
    Label4.Text = date1.ToShortDateString();
    Label5.Text = date1.ToShortTimeString();