使用C#

时间:2017-06-19 11:24:49

标签: c# ms-access

这不会工作,但它尽可能接近,我想删除表Main中的所有行。

private void button17_Click(object sender, EventArgs e)
{
    String connStr,sql;
    connStr = (@"SomeString");
    try {
        sql = "Delete from Main";
        using (OleDbConnection conn = new OleDbConnection(connStr));
        using(OleDbCommand cmd1 = new OleDbCommand(sql));
        conn.Open();
        cmd1.ExecuteNonQuery();
        conn.Close();
    }
    catch(Exception ex)
    {
        SetCon.Text = SetCon.Text + "Error " + ex + "\n
    }
}

它在行上失败:

conn.Open();
cmd1.ExecuteNonQuery();
conn.Close();

它不会使用错误"does not exist in this context"进行编译。

3 个答案:

答案 0 :(得分:2)

using (OleDbConnection conn = new OleDbConnection(connStr)){
    OleDbCommand cmd1 = new OleDbCommand(sql);
    conn.Open();
    cmd1.ExecuteNonQuery();
    conn.Close();
}

当您使用using(是的,英语)时,您必须定义对象(此处:conn)有效的范围。
此范围由{ ... }定义,其中放置了以下代码。

using (OleDbConnection conn = new OleDbConnection(connStr);;之后立即结束此范围,这意味着以下代码将无权访问该对象。

如果您想将usingOleDbCommand一起使用,它应该如下所示:

using (OleDbConnection conn = new OleDbConnection(connStr))
{
    conn.Open();
    using (OleDbCommand cmd1 = new OleDbCommand(sql))
    {                   
        cmd1.ExecuteNonQuery();
    }
    conn.Close();
}

如果您想了解有关using的更多信息,请参阅Microsoft Docs

  

通常,当您使用IDisposable对象时,您应该在using语句中声明并实例化它。 using语句以正确的方式调用对象上的Dispose方法,并且(如前所示使用它时)一旦调用Dispose,它也会导致对象本身超出范围。在using块中,该对象是只读的,不能修改或重新分配。

在我的上一个示例中,范围如下所示:Scopes

黄色类似于conn的范围,而橙色类似于cmd1的范围。

如果需要,可以调用对象的范围生命周期,因为它在之后标记为Disposed

答案 1 :(得分:2)

C#using语句确保在存在进程代码块时在封装的.Dispose()对象上调用IDisposable方法。

由于您在两个using语句后都有分号,因此推断出OleDbConnectionOleDbCommand的范围仅限于那一行。

通过删除分号并将操作语句包装在弯曲括号中,指示using范围,您可以编译代码。请注意,您可以使用共享相同范围的语句“堆叠”多个,如下所示:

using (OleDbConnection conn = new OleDbConnection(connStr))
using(OleDbCommand cmd1 = new OleDbCommand(sql))
{
    conn.Open();
    cmd1.ExecuteNonQuery();
    conn.Close();
}

进一步阅读:using Statement

答案 2 :(得分:0)

认为您需要了解如何使用“using”关键字。它后面可能应该有一个包含部分代码的块语句。