如何使用c#在Ms Access中插入当前日期/时间

问题描述 投票:0回答:6

我几乎尝试了所有方法来使用 C# 将当前日期和时间插入到 MS Access 数据库中,但似乎没有任何效果。 表结构看起来像

ID(Primary Key) Est_ID(Number)  saveName(Text) userName(Text) timestamp(Date/Time)

代码看起来像

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();

DateTime today = DateTime.Today;
DateTime time= DateTime.Now;
string name = Request.Form["saveName"];

string my_querry = "INSERT INTO TABLENAME (userName, Est_id,saveName,timestamp) VALUES(@userName,@Est_id,@saveName,@timestamp)";

OleDbCommand cmd = new OleDbCommand(my_querry, conn);

cmd.Parameters.AddWithValue("@userName", userName);
cmd.Parameters.AddWithValue("@Est_id", est_index);
cmd.Parameters.AddWithValue("@saveName", name);
cmd.Parameters.AddWithValue("@timestamp",time);

cmd.ExecuteNonQuery();

我尝试过格式化。我添加了 # 但似乎没有任何作用。这真的很令人沮丧,因为我花了一天多的时间才让它发挥作用。我究竟做错了什么?

c# .net datetime ms-access
6个回答
1
投票

OleDB/Access 要求您显式设置日期/时间值的数据类型。

var param = cmd.Parameters.AddWithValue("@timestamp",time);
param.OleDbType = OleDbType.Date;

1
投票
OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();

string name = Request.Form["saveName"];

string my_querry = "INSERT INTO TABLENAME (userName, Est_id,saveName,timestamp) VALUES(@userName,@Est_id,@saveName,Now())";

OleDbCommand cmd = new OleDbCommand(my_querry, conn);

cmd.Parameters.AddWithValue("@userName", userName);
cmd.Parameters.AddWithValue("@Est_id", est_index);
cmd.Parameters.AddWithValue("@saveName", name);


cmd.ExecuteNonQuery();

0
投票

根据此链接https://support.office.com/en-us/article/Format-the-date-and-time-field-in-Access-47fbbdc1-52fa-416a-b8d5-ba24d881b698

您可能需要检查数据库中的列设置,是否已将时间戳列的格式设置为一般日期,以与 C# 中的 DateTime.Now 匹配。

另外,您需要检查 System.DateTime 的输出以及您的数据库时间格式是 12 小时制还是 24 小时制。

希望这些信息可以帮助到您。


0
投票

如果您使用 Tortuga Chain:

static AccessDataSource s_DataSource = new AccessDataSource(connectionString); //one per application

DateTime today = DateTime.Today;
DateTime time= DateTime.Now;
string name = Request.Form["saveName"];

s_DataSource.Insert("TABLENAME", new {@username = userName, @Est_id = est_index,@saveName = name,@timestamp = time}).Execute();

0
投票

这还没有选定的答案。我遇到了类似的问题并已解决,因此我将其发布在这里希望对其他人有所帮助。首先让我们稍微修复一下@user3342812代码

OleDbConnection conn = new OleDbConnection(connectionString);
conn.Open();

DateTime time= DateTime.Today;
string name = Request.Form["saveName"];

string editTableName = "name of table to edit"

string my_querry = $"INSERT INTO {editTableName} ([userName], [Est_id], [saveName],[timestamp]) VALUES(?,?,?,?)";

OleDbCommand cmd = new OleDbCommand(my_querry, conn);

cmd.Parameters.AddWithValue("@userName", userName);
cmd.Parameters.AddWithValue("@Est_id", est_index);
cmd.Parameters.AddWithValue("@saveName", name);
cmd.Parameters.AddWithValue("@timestamp",time);

cmd.ExecuteNonQuery();

注: 您并不总是必须在变量周围使用“[]”,但如果您的 MS Access (MSA) 字段是保留字,您将收到错误消息,所以我一直在使用它们。

虽然OP可以使用

VALUES(@userName,@Est_id,@saveName,@timestamp)
我发现使用起来更简单、更安全
VALUES(?,?,?,?)

*最后说明:* 我在这里看到的最后一个问题,以及我一整天都在努力解决的问题是将日期时间输入 MSA。 MSA 具有类似于 8/8/2024 的日期时间格式,但 C# 日期时间可以具有多种格式,其中之一是 DateOnly 这不起作用,因为 MSA 没有数据类型 DateOnly。我构建它并让 MSA 接受的方式是:

public class TestModel
{
   public TestModel() 
   {
       _opened = DateTime.Today;
   }
   private readonly DateTime _opened;
   public DateTime Opened
   {
       get => _opened;
   }
}

-1
投票

我知道这篇文章有点旧,但它可以帮助某人。 从今天早上开始我就面临这个问题。我终于找到了解决方案。

DateTime.Now
发送到数据库的值采用
{dd / mm / yyyy hh: mm: ss}
的形式,我认为发生的情况是访问无法识别
{ }

因此,要解决这个问题,只需将日期转换为字符串,然后再将其分配给参数即可:

cmd.Parameters.AddWithvalue("@timestamp", time.ToString());

或者

cmd.Parameters.AddWithvalue("@timestamp", oleDbType.Date).Value=time.ToString());

这对我来说非常有效

© www.soinside.com 2019 - 2024. All rights reserved.