在SQL Server CE中更正日期时间格式?

问题描述 投票:5回答:4

我有一个C#DateTime类,想知道我需要在SQL Server CE查询中将其格式化以将其插入到数据库中,我希望插入日期和时间。目前当我尝试其变体时,我得到了格式异常无效。

我正在使用的当前格式是:dd/MM/yyyy,希望做像dd/MM/yyyy hh:mm:ss这样的事情。

我试图插入的方式是这样的:

 ( ( DateTime )_Value ).ToString( "dd/MM/yyyy hh:mm:ss" )

显然hh:mm:ss不工作,如果不存在dd/MM/yyyy在查询中成功执行。

我尝试了一些格式,包括我在谷歌上发现但迄今为止没有一种格式...

c# sql datetime sql-server-ce
4个回答
15
投票

如果你担心格式正确,那么事情已经严重错误了。在任何数据库中正确使用datetime值需要做两件事,而不仅仅是sqlce:

  1. 确保您使用的是日期时间类型(不是像varchar这样的文本类型)
  2. 确保在参数化查询中使用日期时间参数,而不是字符串连接。

如果您这样做,则不需要格式化。完全没有。例:

 void SetDate(int recordID, DateTime timeStamp)
 {
    string SQL = "UPDATE [sometable] SET someDateTimeColumn= @NewTime WHERE ID= @ID";

    using (var cn = new SqlCeConnection("connection string here"))
    using (var cmd = new SqlCeCommand(SQL, cn))
    {
        cmd.Parameters.Add("@NewTime", SqlDbType.DateTime).Value = timeStamp;
        cmd.Parameters.Add("@ID", SqlDbType.Integer).Value = recordID;

        cn.Open();
        cmd.ExecuteNonQuery();
    }
} 

永远不会永远使用字符串操作将值替换为sql查询。这是一个巨大的禁忌。


6
投票

请尝试以下格式:

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")

1
投票

伙计,你不需要将字符串转换为DateTime。

使用新DateTime的实例并将日期作为参数传递。像这样:

using (var ctx = new DBPreparoEntities())
            {
                var _client = from p in ctx.Client
                                 select new Client
                                 {
                                     data = new DateTime(2016,08,17),
                                     dateconf = null,
                                     scod_cli = p.Rua,
                                     valorini = 7214.62m,
                                 };
                return client.ToList();
            }

不要使用:

... data = DateTime.Parse("2016/12/10") // or other type convertions.

0
投票

抱歉这是在vb.net中,但这是我用来转换CE日期/时间格式的方法:

    Public Shared Function ConvertSqlDateTimeFormat(ByVal s As String) As String
    Dim theDate As New Text.StringBuilder
    Dim sTemp As String = ""
    Dim iIndex As Integer

    If s.Length > 8 Then
        'first we do the time
        iIndex = s.IndexOf(" ", System.StringComparison.OrdinalIgnoreCase)
        If iIndex > 0 Then
            sTemp = s.Substring(iIndex).Trim
            iIndex = sTemp.IndexOf(".", System.StringComparison.OrdinalIgnoreCase)
            If iIndex > 0 Then
                sTemp = sTemp.Substring(0, iIndex)
            End If
        End If

        'next the date
        theDate.Append(s.Substring(4, 2))
        theDate.Append("/")
        theDate.Append(s.Substring(6, 2))
        theDate.Append("/")
        theDate.Append(s.Substring(0, 4))
        theDate.Append(" ")
        theDate.Append(sTemp)
    End If
    Return theDate.ToString
End Function
© www.soinside.com 2019 - 2024. All rights reserved.