2017-03-02 5 views
0

Voici le code:"ExecuteNonQuery: la propriété Connection n'a pas été initialisée."

string str = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/Users/charlyn_dale/Documents/Visual Studio 2010/Projects/LMS/WindowsFormsApplication2/Accounts.accdb;Persist Security Info=False"); 
      OleDbCommand conn = new OleDbCommand(str); 
      con.Open(); 
      string query = "insert into Account ([Username],[Password],FirstName,MiddleName,LastName,Age,Section,Gender,Address,AccountStatus) values('" + txt1.Text + "','" + txt2.Text + "','" + txt4.Text + "','" + txt5.Text + "','" + txt6.Text + "','" + txt7.Text + "','" + txt8.Text + "','" + cmb2.Text + "','" + txt9.Text + "','" + cmb1.Text + "')"; 
      OleDbCommand cmd = new OleDbCommand(query, con); 
      conn.ExecuteNonQuery(); 
      MessageBox.Show("Registration Success!"); 
      con.Close(); 

et l'erreur est:

propriété de connexion n'a pas été initialisé

+0

sont '' con' et conn' différents? –

+0

Oui, comme le souligne @PrashanthBenny, vous devez changer 'con.Close' et 'con.Open' pour utiliser 'Conn' –

Répondre

0

Il y a 3 principaux problèmes dans votre base de données Access connexion:

  1. OleDbConnection La propriété de chaîne de connexion n'a pas été initialisée lors de l'ouverture de la connexion OLE DB (notez que con est différent de conn dans ce contexte).

  2. La chaîne de connexion affectée à tort à la variable conn qui a été déclarée comme OleDbCommand, utilisez plutôt OleDbConnection.

  3. Le chemin de la source de données de chaîne de connexion semble invalide en utilisant une barre oblique pour séparateur de répertoire (en supposant le fichier cible existe dans le dossier Windows), utilisez la séquence d'échappement backslash (\\) ou backslash avec chaîne littérale au lieu (par exemple @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\......").

Par conséquent, la séquence de connexion correcte doit être comme ceci:

string str = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\charlyn_dale\\Documents\\Visual Studio 2010\\Projects\\LMS\\WindowsFormsApplication2\\Accounts.accdb;Persist Security Info=False"); 

using (OleDbConnection conn = new OleDbConnection(str)) 
{ 
    conn.Open(); 

    // security tips: better use parameter names to prevent SQL injection on queries 
    // and put value checking method for all textbox values (sanitize input) 
    string query = "insert into Account ([Username],[Password],FirstName,MiddleName,LastName,Age,Section,Gender,Address,AccountStatus) values ('" + txt1.Text + "','" + txt2.Text + "','" + txt4.Text + "','" + txt5.Text + "','" + txt6.Text + "','" + txt7.Text + "','" + txt8.Text + "','" + cmb2.Text + "','" + txt9.Text + "','" + cmb1.Text + "')"; 
    using (OleDbCommand cmd = new OleDbCommand(query, conn)) 
    { 
     conn.ExecuteNonQuery(); 
    } 
    ... // other stuff 
    conn.Close(); 
} 

NB: using déclarations supplémentaires en raison de la connexion OLE DB doivent être éliminés immédiatement après utilisation pour libérer des ressources.

questions similaires:

get an error as ExecuteNonQuery:Connection property has not been initialized

ExecuteNonQuery: Connection property has not been initialized (access database)

ExecuteNonQuery: Connection property has not been initialized