6

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

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

4

5 回答 5

18

如果您完全担心格式正确,那么已经出现了严重错误。要在任何数据库中正确使用日期时间值,您需要做两件事,而不仅仅是 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 查询。这是一个巨大的禁忌。

于 2012-08-20T02:42:58.363 回答
6

尝试以下格式:

DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
于 2012-08-20T02:25:26.703 回答
1

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

使用新 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.
于 2016-10-27T20:46:50.987 回答
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
于 2012-08-20T02:23:15.953 回答
0
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;
    }
}

上面的代码对我有用。

1

于 2020-04-27T15:53:58.223 回答