1

ここで何が間違っていますか?

using System.Data;
using System.Data.OleDb;

namespace myProject.Account
{
    public class DbManager
    {

        private OleDbConnection OpenDbConnection()
        {
            string connectionString = GetConnectionString();
            return new OleDbConnection {ConnectionString = connectionString};
        }

        private string GetConnectionString()
        {
            return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myDataBase.accdb";
        }

       public void InsertUser(string name, string loginName, string password)
       {
            OleDbConnection conn = OpenDbConnection();

            OleDbCommand command = new OleDbCommand(
                 "INSERT INTO tblUser (UserName, LoginName, Password) VALUES (@name,@login,@pwd)",
                 Conn);

            command.Parameters.Add("@name", OleDbType.VarChar).Value = name;
            command.Parameters.Add("@login", OleDbType.VarChar).Value = loginName;
            command.Parameters.Add("@pwd", OleDbType.VarChar).Value = password;
            command.ExecuteNonQuery();
       }
   }
}

.

このエラーが発生しました:

ExecuteNonQuery には、オープンで使用可能な接続が必要です。接続の現在の状態は閉じています。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.InvalidOperationException: ExecuteNonQuery には、オープンで使用可能な接続が必要です。接続の現在の状態は閉じています。

ソース エラー:

行 31: command.ExecuteNonQuery();

私はいくつかの他のスレッドを見ようとしましたが、どれも役に立ちませんでした:

ExecuteNonQuery には、オープンで使用可能な接続が必要です。接続の現在の状態は閉じています

MS Access DB が実行後に変更を保存しない (C#)

4

2 に答える 2

4

接続を開くのを忘れているようです (そして、間違った接続をコマンドに割り当てています)。試す:

       using(OleDbConnection conn = OpenDbConnection())
        {
          using(OleDbCommand command = new OleDbCommand( 
               "INSERT INTO tblUser (UserName, LoginName, Password) VALUES (@name,@login,@pwd)")) 
          {
          command.CommandType = CommandType.Text;
          command.Parameters.Add("@name", OleDbType.VarChar).Value = name; 
          command.Parameters.Add("@login", OleDbType.VarChar).Value = loginName; 
          command.Parameters.Add("@pwd", OleDbType.VarChar).Value = password; 
          command.Connection = conn; 

          conn.Open();

          command.ExecuteNonQuery();
          } 
        }

その代わり。using ステートメントも使用することをお勧めします。あなたのconnection.closeを管理します。

于 2011-12-03T21:16:14.390 に答える
3

OleDbConnection conn = OpenDbConnection();

追加

conn.Open();

または、次のように変更OpenDbConnectionします。

    private OleDbConnection OpenDbConnection()
    {
        string connectionString = GetConnectionString();

        OleDbConnection conn = new OleDbConnection {ConnectionString = connectionString};

        conn.Open();

        return conn;
    }
于 2011-12-03T21:13:55.583 に答える