【问题标题】:How to insert ONLY the date (time not included) to ms access database using C#如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库
【发布时间】:2017-03-18 15:43:44
【问题描述】:
OleDbCommand command3 = new OleDbCommand();
command3.Connection = connection;
command3.CommandText = "INSERT into AddLoad(ID_Number,Load_Added,Load_Date) values (@ID_Number, @Load_Added,@Load_Date)";
command3.Parameters.AddWithValue("@ID_Number",UserControl_AddLoadConfirmation.INumberValue);
command3.Parameters.AddWithValue("@Load_Added",addbalance);
command3.Parameters.AddWithValue("@Load_Date",DateTime.Now.ToString());
command3.ExecuteNonQuery();

我尝试将 ms access 数据库中日期列 (Load_Date) 的格式更改为“短日期”格式,当我查看我的 Datagrid 中的所有数据时,它仍然带有hour:minute format

我不确定问题可能是这个代码DateTime.Now.ToString()

【问题讨论】:

    标签: c# winforms ms-access


    【解决方案1】:

    如果您要在数据库中保留日期或日期时间

    1. 数据库中的类型应该是 datetime(不是 varchar!)
    2. 您应该直接在命令中将 DateTime 类型传递给您的数据库(不是等效的字符串)
    3. 从数据库查询时应回读日期时间类型(不是等效字符串)

    所以这一行

    command3.Parameters.AddWithValue("@Load_Date",DateTime.Now.ToString());
    

    变成这样

    command3.Parameters.Add(New OleDbParameter("@Load_Date", OleDbType.Date) { Value = DateTime.Today });
    

    这还可以确保您将正确的类型传递给命令,以便它知道它在模式中的表示方式。你真的不应该调用AddWithValue,因为这不会将该信息传递给命令。


    还请记住,使用 Ole(即访问)时,参数是位置参数而不是命名参数。这意味着它们在查询中出现的顺序必须与它们在参数集合中出现的顺序相同。

    【讨论】:

    • 谢谢先生的回复。我还是 C# 的新手,-ive 已经将格式更改为 datetime(我使用 ms 访问)-而且,我没有尝试从命令或其他东西输入任何日期。我只想插入日期(不包括时间)。再次感谢 :) 这段代码不起作用 command3.Parameters.Add(New OleDbCommand("@Load_Date", OleDbType.DateTime) {Value = DateTime.Now};
    • @JohnR.deVeyra - 你还在遇到问题吗?
    • @JohnR.deVeyra - 也不要使用shortdate,只需使用datedatetime 并相应地更改命令参数中的上述OleDbType
    • @JohnR.deVeyra - 我编辑了我的代码(6 分钟前)。刷新我的答案...它使用OleDbType.DateSystem.DateTime.Now.Date 作为值。
    • DateTime.Today 将是直接来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多