访问日期插入

时间:2012-12-23 15:19:22

标签: c# visual-studio ms-access insert

我正在进行访问,但卡在具有日期时间的插入查询中。像这些查询对我不起作用。

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '#12/12/23 18:46:38+20#', '0', 'T', 'F', '+923468280124');

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', #'12/12/23 18:46:38+20'#, '0', 'T', 'F', '+923468280124');

INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], 
[grid_electricity], [genset_electricity], [genset_number]) 
VALUES('001', '12/12/23 18:46:38+20', '0', 'T', 'F', '+923468280124');

enter image description here

有什么想法吗?可能是错的。

这是我在c#中的代码:

con = new OleDbConnection(ConnStr);
con.Open();

cmd = con.CreateCommand();
cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" +
grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');";
cmd.ExecuteNonQuery();

我也试过了。

cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], 
[fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES('" + genset_id + "', @rec_t, '" + fuel_level + "', '" + grid_electricity 
+ "','" + genset_electricity + "', '" + genset_number + "');";
cmd.Parameters.Add("@rec_t", OleDbType.DBTimeStamp).Value 
                              = DateTime.Parse(rec_time);

所有其他插入和选择查询都正常工作

4 个答案:

答案 0 :(得分:2)

试试这个

try
{

  con = new OleDbConnection(ConnStr);
  con.Open();

  cmd = con.CreateCommand();
  cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) 
VALUES(?,?,?,?,?,?)";
cmd.Parameters.AddWithValue("@id",id);

cmd.Parameters.AddWithValue("@date",DateTime.Parse("12/12/2009 11:34:55"));
  cmd.ExecuteNonQuery();

}
catch (OleDBException ex)
{
  MessageBox.Show(ex.Message);
}

更新

如果您使用的是Access 2010,则还可以在MSAccess上使用存储过程。有关更多How do I make a stored procedure in MS Access?

的信息,请参阅此文章

答案 1 :(得分:1)

您的INSERT查询有多个问题。我将此版本从您的评论复制到DJ:

INSERT INTO tbl_fuel_levels (
    [genset_id],
    [rec_time],
    [fuel_level],
    [grid_electricity],
    [genset_electricity],
    [genset_number]
    )
VALUES (
    '001',
    '#12/11/2023 2:46:38 PM#',
    '0',
    'T',
    'F',
    '+923468280124'
    );

问题是:

  1. 您正在尝试将字符串'#12/11/2023 2:46:38 PM#'插入日期/时间字段rec_time。丢弃单引号以使该值成为日期/时间字面值而不是字符串:#12/11/2023 2:46:38 PM#
  2. 您正尝试将字符串'T'插入“是/否”字段grid_electricity。请使用不带引号的True
  3. 您正尝试将字符串'F'插入“是/否”字段genset_electricity。这与问题#2的问题相同。使用False不加引号。
  4. 使用Access'查询设计器创建新查询。将其切换到SQL View并粘贴到以下语句中:

    INSERT INTO tbl_fuel_levels (
        [genset_id],
        [rec_time],
        [fuel_level],
        [grid_electricity],
        [genset_electricity],
        [genset_number]
        )
    VALUES (
        '001',
        #12/11/2023 2:46:38 PM#,
        '0',
        True,
        False,
        '+923468280124'
        );
    

    如果该语句存在任何问题,请在Access中解决问题,然后再使用c#代码创建语句。

    或者更好,使用参数查询方法。也许您可以在使用“是/否”字段解决这些问题后将其工作。

答案 2 :(得分:0)

我可以通过这种方式建议您首先捕获Exact Exception,这样我们就可以确定Insert失败的字段。我认为你传递的日期是奇怪的尝试传递“MM / DD / YYY HH:MM :SS“

try
{

  con = new OleDbConnection(ConnStr);
  con.Open();

  cmd = con.CreateCommand();
  cmd.CommandText = "INSERT INTO tbl_fuel_levels([genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number]) VALUES('" + genset_id + "', '" + rec_time + "', '" + fuel_level + "', '" + grid_electricity + "', '" + genset_electricity + "', '" + genset_number + "');";
  cmd.ExecuteNonQuery();

}
catch (OleDBException ex)
{
  MessageBox.Show(ex.Message);
}

如果你决定使用AddWithParameters()方法,你可能想尝试这样的事情

cmd.Parameters.AddWithValue("?", DateTime.Parse("12/11/2023 2:46:38"));

或正确的方法是这样的

"INSERT INTO tbl_fuel_levels[genset_id], [rec_time], [fuel_level], [grid_electricity], [genset_electricity], [genset_number])
 VALUES('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", genset_id, rec_time, fuel_level, grid_electricity, genset_electricity, genset_number)";

我建议创建变量并将值赋给变量

为这些值创建并分配变量 这样你就不必拥有一个带有所有逗号的讨厌的插入语句

genset_id,rec_time,fuel_level,grid_electricity,genset_electricity,genset_number

答案 3 :(得分:0)

要在MS Access查询中设置日期格式,请仅使用#符号:

#12/12/23 18:46:38+20#