OleDb 命令失败

OleDbCommand Failed

我使用这段代码向数据库添加一条记录Clients.accdb 但是当我尝试执行该命令时它失败了(如果我使用 Microsoft Access 打开数据库,该命令有效,所以它不是错误的命令)。

我的添加函数如下:

public static void AddClient(string ipAddress, string macAddrress, string machineName) 
{
    string command = "INSERT INTO tbl_Clients (ipAddress, macAddress, machineName) VALUES ('" + ipAddress +"', '" + macAddrress + "', '" + machineName + "')";
    OleDbConnection connection= new OleDbConnection(ConnectionStringStatic());
    OleDbCommand cmd = new OleDbCommand(command, connection);
    try
    {
        connection.Open();
        OleDbDataReader dr = cmd.ExecuteReader(); // here it move to the catch..why ??
        while (dr.Read())  
        {
        }                         
        dr.Close();
    }
    catch (OleDbException ex)   
    {
    }
    catch (Exception ex)         
    {
    }
    finally
    {
        if (connection.State != ConnectionState.Closed)
        {
            connection.Close();
        }
    }
}

我使用了几乎相同的方法(只有连接字符串和数据库不同)并且它起作用了。

为什么它在这里不起作用?

您需要使用 ExecuteNonQuery 执行查询。 ExecuteReader returns 数据对 INSERT 语句没有意义。

但更重要的是,您应该始终使用 parameterized queries. This kind of string concatenations are open for SQL Injection 攻击。

还可以使用 using statement 自动处理您的连接和命令,而不是手动调用 Close 方法。

using(var connection = new OleDbConnection(ConnectionStringStatic()))
using(var cmd = connection.CreateCommand())
{
      cmd.CommandText = @"INSERT INTO tbl_Clients (ipAddress, macAddress, machineName)
                          VALUES (?, ?, ?)";
      cmd.Parameters.Add("@ip", ipAddress);
      cmd.Parameters.Add("@mac", macAddrress);
      cmd.Parameters.Add("@name", machineName);
      connection.Open();
      cmd.ExecuteNonQuery();
} // <-- Both connection and command are disposed here