C# ExecuteNonQuery 错误(将 My.ASP Web 窗体连接到 Access 数据库)

C# ExecuteNonQuery Error (Connecting My.ASP Web Form to an Access DB)

我正在尝试将我的 ASP.NET 在线注册表连接到 MS Access 后端数据库。我使用的连接代码是

String connString;
connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Z\Desktop\Comp\MyWebsite\WorkDatabase.mdb";
OleDbConnection myConnection = new  OleDbConnection(connString);
myConnection.Open();
string myQuery = "INSERT INTO Parent([Username], [FirstName], [Surname], [Email], [Mobile], [Postcode], [Password]) values('" + Usernametb.Text + "','" + Firsttnametb.Text + "','" + Surnametb.Text + "','" + Emailtb.Text + "','" + Mobiletb.Text + "','" + Postcodetb.Text + "','" + Passwordtb.Text + "')";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
myCommand.ExecuteNonQuery();
myConnection.Close();

try
{
    using (myConnection)
    {
        myConnection.Open();
        myCommand.ExecuteNonQuery();
        SuccReglbl.Text = "successful registration";
    }
}
catch (Exception ex)
{
    SuccReglbl.Text = "Exception in DBHandler" + ex;
}
finally
{

}

myCommand.ExecuteNonQuery();
OleDbDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{

}
myConnection.Close();

当我点击 "Register" 按钮时总是出现错误。错误是

"ExecuteNonQuery requires an open and available Connection. The connection's current state is closed."

我不确定如何解决这个问题。

执行第一个查询后,您将关闭数据库连接。但是,在下面的 try-catch 块之后,您执行另一个查询。而此时,连接已经关闭

我建议仅在执行完所有查询后关闭数据库连接。这样您就不需要为每个查询都建立新的连接。

更新:
除了最后一个和不必要的 using 语句外,我删除了所有关闭。此代码应该可以正常工作:

String connString;
connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Z\Desktop\Comp\MyWebsite\WorkDatabase.mdb";
OleDbConnection myConnection = new  OleDbConnection(connString);
myConnection.Open();
string myQuery = "INSERT INTO Parent([Username], [FirstName], [Surname], [Email], [Mobile], [Postcode], [Password]) values('" + Usernametb.Text + "','" + Firsttnametb.Text + "','" + Surnametb.Text + "','" + Emailtb.Text + "','" + Mobiletb.Text + "','" + Postcodetb.Text + "','" + Passwordtb.Text + "')";
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);
myCommand.ExecuteNonQuery();

try
{
    myCommand.ExecuteNonQuery();
    SuccReglbl.Text = "successful registration";
}
catch (Exception ex)
{
    SuccReglbl.Text = "Exception in DBHandler" + ex;
}
finally
{

}

myCommand.ExecuteNonQuery();
OleDbDataReader myReader = myCommand.ExecuteReader();
while (myReader.Read())
{

}
myConnection.Close();

您两次关闭了数据库连接。 尝试先删除 myConnection.Close();

@Jerodev 我的代码的最新版本是 字符串连接字符串; connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Z\Desktop\MyWebsite\WorkDatabase.mdb";

        OleDbConnection myConnection = new
            OleDbConnection(connString);
        myConnection.Open();
        string myQuery = "INSERT INTO Parent([Username], [FirstName], [Surname], [Email], [Mobile], [Postcode], [Password]) values('" + Usernametb.Text + "','" + Firsttnametb.Text + "','" + Surnametb.Text + "','" + Emailtb.Text + "','" + Mobiletb.Text + "','" + Postcodetb.Text + "','" + Passwordtb.Text + "')";
        OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection);

        myCommand.ExecuteNonQuery();


        try
        {
            using (myConnection)

            {
                myCommand.ExecuteNonQuery();
                SuccReglbl.Text = "successful registration";
            }
        }
        catch (Exception ex)
        {
            SuccReglbl.Text = "Exception in DBHandler" + ex;
        }

        finally
        {
            myConnection.Close();
        }

         OleDbDataReader myReader = myCommand.ExecuteReader();
         while (myReader.Read())
         {
         }

它给出了同样的错误,但它说错误是一致的 "OleDbDataReader myReader = myCommand.ExecuteReader();"

根据您所说的,这就是您需要的全部代码。

请注意您的代码容易受到 SQL 注入攻击,因为您将用户输入直接填充到查询中。用户可以拥有您的数据库或非常容易地销毁它。 See this for more information 和研究 OleDbParameter.

string myQuery = "INSERT INTO Parent([Username], [FirstName], [Surname], [Email], [Mobile], [Postcode], [Password]) values('" + Usernametb.Text + "','" + Firsttnametb.Text + "','" + Surnametb.Text + "','" + Emailtb.Text + "','" + Mobiletb.Text + "','" + Postcodetb.Text + "','" + Passwordtb.Text + "')";
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Z\Desktop\Comp\MyWebsite\WorkDatabase.mdb";
try
{
    using(OleDbConnection myConnection = new  OleDbConnection(connString))
    {
        using(OleDbCommand myCommand = myConnection.CreateCommand())
        {
            myCommand.CommandText = myQuery;
            myConnection.Open();
            myCommmand.ExecuteNonQuery();
            SuccReglbl.Text = "successful registration";
        }
    }
}
catch (Exception ex)
{
    SuccReglbl.Text = "Exception in DBHandler " + ex.Message;
}