【问题标题】:Access DB, No reaction from the DB访问数据库,数据库无反应
【发布时间】:2014-01-19 11:01:32
【问题描述】:

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

你发现了什么可能是错误的吗?

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

【问题讨论】:

  • 您确定您的连接字符串正确吗? Convert.ToString(id)BitConverter.ToString(mac) 的值是多少?为什么你认为你应该拥有这些Commands 方法?您的列的类型是什么?而且您应该始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。
  • 类型:J_ID -> 编号,节点 ID -> 编号,节点 MAC -> 字符串,Q 行 -> 编号,状态 -> 字符串。现在我刚刚学习使用 sql 等,所以不需要参数化查询。
  • 提示小鲍比桌...
  • 数据目录? Where is DataDirectory
  • DataDirectory 是项目的主文件夹。

标签: c# sql ms-access syntax


【解决方案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 中的建议。

【讨论】:

  • 同样的问题。桌子还是空的。
  • @VictorLev 更新了我的答案。您能否尝试我的代码并让我知道它是否有效?
  • 找到问题了,感谢stackoverflow.com/users/242520/ta-speot-is更改了“|DataDirectory|”在完整路径的连接字符串中。像魅力一样工作。您的代码运行良好且更加舒适……感谢您的帮助。
  • 也使用 using 语句来处理你的 OleDbConnection OleDbCommand 也是 IDisposable,因为它是一个 DbCommand。 conn.Close 也是多余的。
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 2023-04-04
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多