遇到问题...可能是查询语法中的某些内容, 并且编译器不会抛出任何异常。 但是表格没有收到信息。
你注意到的一切可能都错了吗?
OleDbConnection conn;
OleDbCommand cmd;
public Commands(OleDbConnection con)
{
conn = con;
}
public Commands()
{
conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB.accdb");
}
public void node_Join(int id, byte[] mac)
{
try
{
conn.Open();
cmd = new OleDbCommand(@"INSERT INTO Nodes ([J_ID],[Node ID],[Node MAC],[Line Quality],[Status]) values('" + Convert.ToString(id) + @"',0,'" + BitConverter.ToString(mac) + @"',0,'Join')", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception exc)
{
conn.Close();
MessageBox.Show(exc.Message.ToString());
}
}
答案 0 :(得分:1)
目前尚不清楚你尝试做什么,我觉得冒风险回答但无论如何......
正如我在 comment 中所说,您应该始终使用parameterized queries。这种字符串连接对 SQL Injection 攻击开放。
由于您的J_ID
列为Number
,因此无需使用Convert.ToString(id)
插入字符串。使用id
(我假设它是一个整数)可能会很好。
还可以使用using
statement处理您的OleDbConnection
。
试试这个;
using(OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB.accdb"))
{
using(cmd = new OleDbCommand(@"INSERT INTO Nodes ([J_ID],[Node ID],[Node MAC],[Line Quality],[Status]) values(?, ?, ?, ?, ?", conn))
{
cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@nodeid", 0);
cmd.Parameters.AddWithValue("@nodemac", BitConverter.ToString(mac));
cmd.Parameters.AddWithValue("@line", 0);
cmd.Parameters.AddWithValue("@status", "Join");
conn.Open();
cmd.ExecuteNonQuery();
}
}
还要考虑史蒂夫在 his comment 中的建议。