2016-06-03 7 views
0

Ich kann nicht scheinen, es zu lösen, ich versuche, eine Verbindung zu meinem Access-Datenbank, aber ich kann nur und immer Fehler bekommen. kann mir jemand helfenDie Connectionstring-Eigenschaft wurde nicht initialisiert. C# Access-Datenbank

namespace WindowsFormsApplication3 
{ 
    public partial class Form2 : Form 

    { 
     private OleDbConnection connection = new OleDbConnection(); 
     public Form2() 
     { 
      InitializeComponent(); 
      string executable = System.Reflection.Assembly.GetExecutingAssembly().Location; 
      string path = (System.IO.Path.GetDirectoryName(executable)); 
      AppDomain.CurrentDomain.SetData("DataDirectory", path); 
      OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;"); 


     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      Form3 f3 = new Form3(); // Instantiate a Form3 object. 
      f3.Show(); // Show Form3 and 
      this.Close(); // closes the Form2 instance 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      try 
      { 

       connection.Open(); 
       OleDbCommand command = new OleDbCommand(); 
       command.Connection = connection; 
       command.CommandText= "INSERT into Dataaa ([FirstName],[LastName],[ICNO],[Address],[Loan],[Percent],[Payback],[StartDate],[EndDate],[Monthly],[PaymentType],[Remark]) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "','" + textBox8.Text + "','" + textBox9.Text + "','" + textBox10.Text + "','" + textBox11.Text + "','" + textBox12.Text + "')"; 

       command.ExecuteNonQuery(); 
       MessageBox.Show("Details have been Saved."); 

      } 
      catch (Exception ex) 

      { 

       MessageBox.Show("error " + ex); 
      } 
      finally 
      { 
      connection.Close(); 
      } 

     } 
+0

können Sie die Fehlermeldung posten? –

+0

@ M.Schena Die Eigenschaft connectionstring wurde nicht initialisiert –

Antwort

1

out Das Problem ist, dass Sie nie eine Verbindungszeichenfolge an die connection Eigenschaft übergeben, so dass deshalb die Ausnahme ausgelöst wird.

Derzeit initialisieren Sie eine lokale Variable im Konstruktor, die nicht verwendet wird. Sie müssen lediglich die lokale Variable entfernen und die Eigenschaft einfach mit der richtigen Verbindungszeichenfolge initialisieren.

das Problem einfach zu beheben Ihre Konstruktor die Folge ändern:

public Form2() 
{ 
    InitializeComponent(); 
    string executable = System.Reflection.Assembly.GetExecutingAssembly().Location; 
    string path = (System.IO.Path.GetDirectoryName(executable)); 
    AppDomain.CurrentDomain.SetData("DataDirectory", path); 

    this.connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;"); 
} 

und die Initialisierung auf dem Grundstück entfernen, so ist es folgendes:

private OleDbConnection connection; 

Als Owen Pauling sagte, Sie sind offen Für SQL-Injection-Angriffe empfehle ich dringend, dass Sie diese article durchsuchen, damit Sie sich nicht Angriffen aussetzen. Hauptsächlich im Abschnitt zu parametrisierten Abfragen des Artikels.

0

Sie haben sowohl eine private Variable (namens "connection") für eine lokale Variable (namens "connect") für die OleDbConnection. Sie initialisieren letzteres mit der Verbindungszeichenfolge, verwenden aber erstere, um Ihren Befehl auszuführen.

In Ihrer Form2 Methode ändern:

OleDbConnection connect = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;"); 

zu:

connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Database.accdb;User Id=admin; Password=;"); 

Auch Abfrageparameter für Ihren Befehl verwenden, so dass Sie nicht zu SQL-Injection-Angriffe öffnen sind.