如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库

Posted

技术标签:

【中文标题】如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库【英文标题】:How to insert ONLY the date (time not included) to ms access database using C# 【发布时间】: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()

【问题讨论】:

【参考方案1】:

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

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

所以这一行

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 将是直接来源。

以上是关于如何使用 C# 仅将日期(不包括时间)插入 ms 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

从表中选择所有行并仅将不同的值插入到 C# 中另一个位置的数据库中

如何使用 MS Access 在 C# 中的两个日期之间进行搜索

使用 C# windows 窗体向 Ms Access 数据库插入新记录时出现语法错误

C#如何计算不包括特定日期(节假日)的工作日

尝试使用 C# 将数据插入 MS Access 数据库,但插入命令不起作用