OleDbConnection - ExecuteNonQuery требует открытого и доступного соединения.Текущее состояние соединения закрыто - PullRequest
1 голос
/ 04 декабря 2011

Что я здесь не так делаю?

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 требует открытого и доступного соединения. Текущее состояние соединения закрыто.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и ее возникновении в коде.

Сведения об исключении: System.InvalidOperationException: ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто.

Ошибка источника:

Строка 31: command.ExecuteNonQuery ();

Я пытался взглянуть на некоторые другие темы, но ни одна из них не помогла:

ExecuteNonQuery требует открытого и доступного соединения. Текущее состояние соединения закрыто

MS Access DB не сохраняет изменения после выполнения (C #)

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Вы, кажется, забыли открыть свое соединение (и назначаете неправильное соединение для команды). Попробуйте:

       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. Он будет управлять вашим подключением. Закрыть для вас.

2 голосов
/ 04 декабря 2011

* После 1001 *

OleDbConnection conn = OpenDbConnection();

добавить

conn.Open();

Либо измените OpenDbConnection следующим образом:

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

        OleDbConnection conn = new OleDbConnection {ConnectionString = connectionString};

        conn.Open();

        return conn;
    }
...