0

我有这个 C# 代码:

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

这给出了结果:01-06-2013

问题是当我尝试将它插入表时,我得到了这个结果:21/06/1894

当我通过输入获取日期时,它以相同的日期格式工作得很好,那么为什么在这种情况下它不起作用呢?

更新

如果我试试这个:

    var RegisterDate = DateTime.Today.Date;

我得到错误:

查询表达式中的语法错误(缺少运算符)

希望得到帮助,谢谢!

4

2 回答 2

3

根本不要使用字符串转换。假设您在数据库中的数据类型是DateTime或类似的,只需使用一个参数并将其值指定为DateTime您的 C# 代码中的开始。(我假设您已经在使用参数化 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();
    }
}
于 2013-06-01T17:09:45.520 回答
1

尝试

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

然后存入数据库。

无需手动将日期转换为不同的表示形式。您可以通过此自定义日期和时间格式字符串。但是,我同意 Jon Skeet 在这个答案下面的评论:

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

笔记:

DateTime类型使用Gregorian calendar作为他们的默认日历。因此,正如 Jon Skeet 所指出的,此答案不适用于其他日历(非公历)。

于 2013-06-01T17:21:23.170 回答