C# Benutzerdaten von c# in access speichern

marivuko

Cadet 3rd Year
Registriert
Mai 2013
Beiträge
48
hallo,

ich möchte ein Programm in C# mit einem Login - Bereich erstellen, wenn man ein Name und ein Passwort in C# eingibt, dann soll dies in einer Access Tabelle gespeichert werden, nur leider passsiert nicht, es kommt auch keine Fehlermeldung, ich weiß nicht mehr weiter, kann mir jmd vielleicht ein Tipp geben? hier mein Code bis Connection funktioniert es, also kann es nicht am ConnenctionString liegen

Code:
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C...";
            string fname = textBox3.Text;
            string lname = textBox4.Text;
            con.Open();
            MessageBox.Show("CONNECTION");

            OleDbCommand cmd = new OleDbCommand("INSERT into Usertabelle (Username,Passwort)"+"values(@fname,@lname)",con);
            if (con.State == ConnectionState.Open)
            {
                cmd.Parameters.Add("@fname", OleDbType.Char, 20).Value = fname;
                cmd.Parameters.Add("@lname", OleDbType.Char, 20).Value = lname;
            try 
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show ("Data Added");
                textBox3.Text = "";
                textBox4.Text ="";
                con.Close();
            }

            catch(Exception expe)
            
            {                
                MessageBox.Show (expe.Source);
                con.Close();
            }

      }

            else
            { 
              MessageBox.Show("CON FAILED");
            }
}
 
Der OleDb-Treiber benutzt nur ein Fragezeichen als Parameternamen. Beim Setzen der Werte ist deshalb auch die Reihenfolge wichtig.
Außerdem fehlt zwischen der Spaltenliste und "values" ein Leerzeichen.
Code:
// ...
OleDbCommand cmd = new OleDbCommand("INSERT into Usertabelle (Username,Passwort)"+" values(?,?)",con); // Leerzeichen vor values!
if (con.State == ConnectionState.Open)
{
    cmd.Parameters.Add("?", OleDbType.Char, 20).Value = fname;
    cmd.Parameters.Add("?", OleDbType.Char, 20).Value = lname;
// ...
 
geht leider immer noch nicht, wenn ich auf den Button drücke kommt sss.PNG
 
Bzw expe.message ;)
Ansonsten verwundert mich Cadillac Beitrag etwas da ich gerade bei einem Projekt auch den oldedb Treiber mit Parametern nutze welche bei mir alle mit "@" anfangen (mit dem Oracleclient Oracle nimmt man zB ":")
 
arne1234 schrieb:
Ansonsten verwundert mich Cadillac Beitrag etwas da ich gerade bei einem Projekt auch den oldedb Treiber mit Parametern nutze welche bei mir alle mit "@" anfangen (mit dem Oracleclient Oracle nimmt man zB ":")
Ich musste länger nicht mehr mit Access arbeiten (glücklicherweise), aber soweit ich mich erinnere haben tatsächlich nur die "?" funktioniert. Die MSDN-Doku zu OleDbParameter liest sich auch so, dass keine benannten Parameter unterstützt werden.
Das gilt zumindest für ADO.NET. Für andere Frameworks, Datenbanken und Treiber könnte es vermutlich anders sein. Welche Sprache und DB benutzt du?
 
Ich würde dir umbedingt empfehlen auf ein ORM wie Entity Framework oder NHibernate umzusteigen. Diese kümmern sich darum dass deine Queries alle parameterisiert werden und verwalten ebenfalls die Connection zur DB. Außerdem hast du dann die Möglichkeit direkt mit normalen C#-Klassen zu arbeiten und damit dann auch deutlich weniger Stress wenn du einfach CRUD Operationen ausführst.

Außerdem kann ich dir folgende Seite ans Herz legen wenn du eine Verbindung zu einer DB aufbauen musst: http://www.connectionstrings.com/
 
Zurück
Oben