Access DB,DB没有反应

时间:2014-01-19 11:01:32

标签: c# sql ms-access syntax

遇到问题...可能是查询语法中的某些内容, 并且编译器不会抛出任何异常。 但是表格没有收到信息。

你注意到的一切可能都错了吗?

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());
    }
}

1 个答案:

答案 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 中的建议。