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

147

我想保存C#中的当前日期时间格式,并将其转换为SQL Server日期格式,例如yyyy-MM-dd HH:mm:ss,以便在我的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#上还有点新,请你帮帮我好吗?


你看过DateTime.TryParseExact吗? - Tim
https://dev59.com/xHI95IYBdhLWcg3wsQP9 - Kamil Budziewski
3
为什么不使用参数来更新DateTime,或者您是将其存储为字符串?ToStringDate上的使用会暗示时间始终为12:00:00 - V4Vendetta
3
你应该使用一个类型为 DATETIME 的参数化查询,这样就可以避免在字符串表示和日期格式之间来回转换的繁琐操作! - marc_s
5
就像其他人所说的,使用参数并将所有内容保持为 datetime 是一个不错的开始。更好的是,你为什么要传递服务器当前时间呢?它有一个 GETDATE() 函数可以完全在服务器端调用。 - Damien_The_Unbeliever
15个回答

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 中,每个字符串都要使用单引号。希望这能帮到你。


-1

只有当你输入 "T"+DateTime.Now.ToLongTimeString()+ '2015-02-23' 时


首先是日期 XD date + "T" + DateTime.Now.ToLongTimeString() - Francisco Mier YTerán

-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());

3
这个问题已经得到答案并接受了一个更优雅的解决方案。而且你漏掉了一个闭合的 " - Jan

-2

将DateTime从C#传递到SQL Server的另一种解决方案,不考虑SQL Server语言设置

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

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

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

如果您的区域设置显示DateTime不同,则使用SQL Server CONVERT表中的相应匹配项

了解更多规则:https://www.techonthenet.com/sql_server/functions/convert.php


这将仅在DateTime上调用ToString(),它是特定于文化设置的。如果发送此SQL命令的机器使用的文化设置与SQL服务器不同,则SQL服务器可能会将其误认为是其他内容。不要这样做!请参阅:https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tostring?view=netcore-3.1#System_DateTime_ToString - Deantwo

-2
   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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接