Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将日期插入数据库不起作用(ASPX/C#)_C#_Sql_Database_Date - Fatal编程技术网

将日期插入数据库不起作用(ASPX/C#)

将日期插入数据库不起作用(ASPX/C#),c#,sql,database,date,C#,Sql,Database,Date,我有一个C#代码: 结果如下:01-06-2013 问题是,当我尝试将其插入到表中时,我得到以下结果:21/06/1894 当我通过输入获得日期时,它在相同的日期格式下工作得很好,那么为什么在这种情况下它不工作呢 更新 如果我尝试这样做: var RegisterDate = DateTime.Today.Date; 我得到一个错误: 查询表达式中的语法错误(缺少运算符) 希望得到帮助,谢谢 根本不使用字符串转换。假设数据库中的数据类型是DateTime或类似的类型,只需使用一个参数并

我有一个C#代码:

结果如下:01-06-2013

问题是,当我尝试将其插入到表中时,我得到以下结果:21/06/1894

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

更新

如果我尝试这样做:

    var RegisterDate = DateTime.Today.Date;
我得到一个错误:

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


希望得到帮助,谢谢

根本不使用字符串转换。假设数据库中的数据类型是
DateTime
或类似的类型,只需使用一个参数并将其值指定为C#code中的
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();
    }
}

根本不要使用字符串转换。假设数据库中的数据类型是
DateTime
或类似的类型,只需使用一个参数并将其值指定为C#code中的
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();
    }
}
试一试

然后存储在数据库中

不需要手动将日期转换为不同的表示形式。你可以经历这一切。但是,我同意Jon Skeet在以下回答中的评论:

如果要表示日期/时间类型,请使用日期/时间类型。那个 这样你就能充分利用 数据库可以处理日期/时间值,您永远不会得到任何数据 该字段中的非日期/时间值

注意:

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

试试看

然后存储在数据库中

不需要手动将日期转换为不同的表示形式。你可以经历这一切。但是,我同意Jon Skeet在以下回答中的评论:

如果要表示日期/时间类型,请使用日期/时间类型。那个 这样你就能充分利用 数据库可以处理日期/时间值,您永远不会得到任何数据 该字段中的非日期/时间值

注意:



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

数据库中的数据类型是什么?DateTime?在DD/MM/YYYY格式中是的。为什么不能在应用程序中使用DateTime对象而不是字符串?@NaveTseva:如果数据库中的DateTime是
DateTime
,则它没有固有的格式。当您将结果转换为文本时,它恰好以
dd/MM/yyyy
格式显示,这并不意味着数据库中存在该格式。您在数据库中的数据类型是什么?DateTime?在DD/MM/YYYY格式中是的。为什么不能在应用程序中使用DateTime对象而不是字符串?@NaveTseva:如果数据库中的DateTime是
DateTime
,则它没有固有的格式。当您将结果转换为文本时,它恰好以
dd/MM/yyyy
格式显示,这并不意味着数据库中存在该格式。谢谢!但是你能发布代码应该是什么样子吗?(我只是靠着这个,我还没有多少C语言方面的经验)@NaveTseva:看我的编辑。您应该始终在SQL中为值使用参数-如果您当前正在构建一个包含其中值的SQL字符串,那么您的代码可能会面临SQL注入攻击的风险。谢谢!但是你能发布代码应该是什么样子吗?(我只是靠着这个,我还没有多少C语言方面的经验)@NaveTseva:看我的编辑。您应该始终在SQL中为值使用参数-如果您当前正在构建包含其中值的SQL字符串,那么您的代码很可能面临SQL注入攻击的风险。在我看来,进行字符串转换是一个非常糟糕的主意。请注意,如果您使用的是非公历系统的区域性,这也会对值产生严重的影响。但是您的代码仍然会将日期转换为字符串表示形式,尽管您说“没有必要手动将日期转换为不同的表示形式”-您正在使用
ToString
将其转换为“不同的”表示形式。为什么这样做?为什么不把它保留为
DateTime
?@JonSkeet该行用于
RegisterDate=RegisterDate.Remove(10);RegisterDate=RegisterDate.Replace('/','-');RegisterDate=String.Join(“-”,RegisterDate.Split('-').Reverse())该OP用于手动将DateTime转换为其所需
string RegisterDate = DateTime.Now.ToString("M-d-yyyy");