SQL Server CE 中的正确日期时间格式?

Posted

技术标签:

【中文标题】SQL Server CE 中的正确日期时间格式?【英文标题】:Correct DateTime format in SQL Server CE? 【发布时间】:2012-08-15 10:08:38 【问题描述】:

我有一个 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 在查询中成功执行。

我尝试了几种格式,包括我在 google 上找到的格式,但到目前为止都没有奏效...

【问题讨论】:

您能否附上您的代码,以便我们查看您的尝试? 您是否能够将其他值插入数据库?遇到任何异常/错误? 您要插入的字段类型是什么? SQL Server 中的 Date 和 DateTime 是有区别的。 嗨@Jake1164,是的,我已经能够毫无问题地将其他值添加到他的数据库中,只是当我尝试添加时间时出现问题...... 尝试年-月-日,在它们之间使用“-”。时间格式相同 yyyy-MM-dd hh:mm:ss 【参考方案1】:

如果您完全不担心格式是否正确,那么您已经出了严重问题。要在任何数据库中正确使用日期时间值,您需要做两件事,而不仅仅是 sqlce:

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

如果您这样做,则不会涉及您的格式。完全没有。示例:

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

从来没有EVER使用字符串操作将值替换为 sql 查询。这是一个巨大的禁忌。

【讨论】:

+1 指出不要使用字符串操作来存储日期。 +1 表示永远不要在 SQL 查询中使用字符串操作。 你可以这样做吗:“UPDATE \@SomeTable SET \@SomeColumn ...等” 堆栈溢出不允许我发布 at 符号,因此 \【参考方案2】:

试试下面的格式:

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

【讨论】:

【参考方案3】:

伙计,你不需要将字符串转换为日期时间。

使用新 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.

【讨论】:

【参考方案4】:
private void button1_Click(object sender, EventArgs e)

    var cnn1 ="";//connection string 
    SqlCeConnection cnn = new SqlCeConnection(cnn1);   
    datetime dt4 = DateTime.Today.Date.ToString("yyyyMMdd").trim();//format 
    var qry ="insert into tbl_test(User_Id, DateOfJoin)values (11,'" + dt4 + "')";
   
    cmd = new SqlCeCommand(qry, cnn);
   
    try
    
        dr = cmd.ExecuteReader();
    
    catch (Exception ex)
    
        string sr = ex.Message;
        throw;
    

以上代码对我有用。

【讨论】:

口头解释往往对其他人有帮助 //simply_pass _datetime _component _通过转换为格式化字符串【参考方案5】:

对不起,这是在 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

【讨论】:

您已经拥有这样一个等待调用的方法的想法是错误的。 sql 数据值的字符串操作在安全代码中没有位置。 好的,那么安全漏洞在哪里呢?当然,我误解了这个问题,而是专注于将数据库中的日期转换为日期时间格式,而不是相反,但是如果数据已经在数据库中,我不确定问题是什么?如果 datetime.tryparse 没有给出正确的结果,你还有什么其他选择?

以上是关于SQL Server CE 中的正确日期时间格式?的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server CE 获取上次复制日期/时间

Windows Phone 8 SQL Server CE 转换为日期时间时发生溢出

比较 SQL Server CE 中的两个 Datetime 类型(“MMMM-yyyy”)

SQL Server——如何指定日期格式

sql server 获取指定格式的当前日期

如何从 SQL Server 中的日期返回月份短格式?