C# SQL Server CE中的日期时间格式是否正确?

C# SQL Server CE中的日期时间格式是否正确?,c#,sql,datetime,sql-server-ce,C#,Sql,Datetime,Sql Server Ce,我有一个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#
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
在查询中成功执行


我尝试了几种格式,包括我在谷歌上找到的格式,但迄今为止没有一种有效…

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

公共共享函数ConvertSqlDateTimeFormat(ByVal s作为字符串)作为字符串
将日期暗显为新文本。StringBuilder
Dim sTemp As String=“”
作为整数的Dim iIndex
如果s.长度>8,则
“首先我们做时间
iIndex=s.IndexOf(“,System.StringComparison.OrdinalIgnoreCase)
如果iIndex>0,则
sTemp=s.子串(iIndex).微调
iIndex=sTemp.IndexOf(“.”,System.StringComparison.OrdinalIgnoreCase)
如果iIndex>0,则
sTemp=sTemp.子字符串(0,iIndex)
如果结束
如果结束
“下一个日期
附加(s.子字符串(4,2))
日期。附加(“/”)
附加日期(s.子字符串(6,2))
日期。附加(“/”)
附加(s.Substring(0,4))
日期。附加(“”)
附加日期(sTemp)
如果结束
返回Date.ToString
端函数

尝试以下格式:

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

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

  • 确保列使用datetime类型(而不是像varchar这样的文本类型)
  • 确保在参数化查询中使用datetime参数,而不是字符串连接
  • 如果您这样做,您的部分就不会涉及格式设置。完全例如:

     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查询。这是一个巨大的no-no.

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

    使用新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.
    
    //上面的代码对我有用


    您是否可以包含代码,以便我们查看您的尝试?您是否能够将其他值插入到数据库中?获取任何异常/错误?插入的字段类型是什么?SQL Server中的Date和DateTime之间存在差异。您好@Jake1164,是的,我可以在数据库中添加其他值,而不会出现任何问题,只是在我尝试添加出错的时间时…尝试使用年-月-日之间的“-”。时间格式与yyyy-MM-dd相同hh:MM:ss认为您已经有了这样一个等待调用的方法是错误的。sql数据值的字符串操作在安全代码中没有位置。好的,那么安全漏洞在哪里呢?诚然,我误解了这个问题,并将重点放在将数据从数据库转换为日期时间格式上,而不是反过来,但如果数据已经在数据库中,我不确定问题出在哪里?如果datetime.tryparse没有给出正确的结果,您还有什么其他选项?+1用于指出永远不要使用字符串操作来存储日期。+1用于在SQL查询中永远不要使用字符串操作的课程。您可以这样做吗:“UPDATE\@SomeTable SET\@SomeColumn…etc”堆栈溢出不允许我发布at符号,因此\a口头解释通常对其他人有用//只需通过转换为格式化字符串来传递\u日期时间\u组件
    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 
                string 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;
                   }
    
       }