我正在进行访问,但卡在具有日期时间的插入查询中。像这些查询对我不起作用。
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);
所有其他插入和选择查询都正常工作
答案 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'
);
问题是:
'#12/11/2023 2:46:38 PM#'
插入日期/时间字段rec_time
。丢弃单引号以使该值成为日期/时间字面值而不是字符串:#12/11/2023 2:46:38 PM#
'T'
插入“是/否”字段grid_electricity
。请使用不带引号的True
。'F'
插入“是/否”字段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#
代码创建语句。
或者更好,使用参数查询方法。也许您可以在使用“是/否”字段解决这些问题后将其工作。
答案 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#