2013-06-01 27 views
0

我有这样的C#代码:插入日期到数据库中不工作(ASPX/C#)

string RegisterDate = DateTime.Now.ToString(); 
RegisterDate = RegisterDate.Remove(10); 
RegisterDate = RegisterDate.Replace('/', '-'); 
RegisterDate = String.Join("-", RegisterDate.Split('-').Reverse()); 

其中给出thie结果:2013年1月6日

的问题是,当我尝试将其插入到表我得到这样的结果:21/06/1894

当我通过输入获取日期它工作在相同的日期格式很大,所以为什么在这种情况下,不工作?

更新

如果我试试这个:

var RegisterDate = DateTime.Today.Date; 

我得到错误:

在查询表达式

愿望

语法错误(缺少操作员)帮助,谢谢!

+1

DB中的数据类型是什么?约会时间? – Botonomous

+0

是的在DD/MM/YYYY格式 –

+1

为什么你不能在你的应用程序中使用DateTime对象而不是字符串? – Botonomous

回答

1

尝试

string RegisterDate = DateTime.Now.ToString("M-d-yyyy"); 

,然后在数据库中存储。

没有必要手动将日期转换为不同的表示形式。你可以通过这个Custom Date and Time Format Strings。但是,我同意Jon Skeet在此答案下的评论:

如果要表示日期/时间类型,请使用日期/时间类型。 您可以利用数据库可以使用日期/时间值执行的各种事情,并且您永远不会在该字段中获取任何非日期/时间值 。

注:

DateTime类型使用Gregorian calendar作为其默认日历。所以,正如Jon Skeet指出的那样,这个答案对其他压光机(非格里历日历)不起作用。

+1

这是一个非常糟糕的主意,通过所有的字符串转换,海事组织。请注意,如果您使用的是具有非格里历日历系统的文化,这对于价值观来说也会产生严重的奇怪现象。 –

+0

@JonSkeet Thaankx指出它......增加了答案。 –

+0

但是,尽管您说“不需要手动将日期转换为不同的表示形式”,但您的代码仍将日期转换为字符串表示形式,您可以使用“ToString”将其转换为“不同”表示形式。为什么这样做?为什么不把它保留为'DateTime'? –

3

根本不要使用字符串转换。假设数据库中的数据类型为DateTime或类似的东西,只需使用参数并在C#代码中将其值指定为DateTime即可。 (我假设你已经在使用参数化SQL,而不是直接在SQL中嵌入数据,如果你还没有使用参数,请立即开始!)

我建议使用DateTime.Today来使它更清晰你只对日期部分感兴趣。 (请注意,这意味着在不同地方运行相同的代码最终可能会插入不同的日期 - 这样可以吗?通常我不喜欢让系统本地时区受到影响。)

您通常应该避免字符串转换除非你真的需要数据的字符串表示。在其他时候,他们只是造成麻烦。

编辑:你问了一个例子。这将是这样的:

using (var connection = new SqlConnection(...)) 
{ 
    connection.Open(); 
    using (var command = new SqlCommand(
     "INSERT INTO Foo (Name, RegisterDate) VALUES (@Name, @RegisterDate)", 
     connection)) 
    { 
     command.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar)) 
          .Value = name; 
     // TODO: Consider whether you really want the *local* date, or some 
     // fixed time zone such as UTC 
     command.Parameters.Add(new SqlParameter("@RegisterDate", SqlDbType.DateTime)) 
          .Value = DateTime.Today; 
     command.ExecuteNonQuery(); 
    } 
} 
+0

谢谢!但你可以发布代码应该是什么样子? (我只是倾向于这一点,并且我还没有在C#上做过任何尝试) –

+0

@NaveTseva:查看我的编辑。您应该*总是*使用SQL中的值参数 - 如果您当前正在构建包含其中值的SQL字符串,那么您的代码可能会面临SQL注入攻击的风险。 –