1

我正在处理访问但陷入具有日期时间的插入查询。像这些查询对我不起作用。

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');

在此处输入图像描述

任何的想法?有什么问题。

这是我在 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

4 回答 4

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 上使用存储过程。有关更多信息,请参阅本文如何在 MS Access 中创建存储过程?

于 2012-12-23T15:45:50.363 回答
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#'到 Date/Time field 中rec_time。丢弃单引号以使该值成为日期/时间文字而不是字符串:#12/11/2023 2:46:38 PM#
  2. 您正在尝试将字符串'T'插入 Yes/No field grid_electricity。改用True不带引号的。
  3. 您正在尝试将字符串'F'插入 Yes/No field genset_electricity。这与问题 #2 相同。False不带引号使用。

使用 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#代码来创建语句。

或者更好的是,使用参数查询方法。一旦你用是/否字段解决了这些问题,也许你可以让它工作。

于 2012-12-23T16:52:11.087 回答
0

我可以建议以下这种方式,您可以先捕获确切异常,以便我们可以确定插入失败的字段.. 我认为您传递的日期很奇怪尝试传递“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

于 2012-12-23T15:39:53.290 回答
0

要在 MSAccess 查询中格式化日期,只需使用以下#符号:

#12/12/23 18:46:38+20#
于 2012-12-23T16:20:25.553 回答