Laden...

Datenbank wird nicht gespeichert und besitzt einen weiteren fehler mit der autoausfüllung

Erstellt von TorresDennis vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.457 Views
T
TorresDennis Themenstarter:in
5 Beiträge seit 2014
vor 10 Jahren
Datenbank wird nicht gespeichert und besitzt einen weiteren fehler mit der autoausfüllung

verwendetes Datenbanksystem: SQL-Dateisystem

Hallo, ich bin neu hier im Forum und habe gleich eine Frage und zwar schreibe ich ein Programm und im Aktuellen Script sollen Benutzer erstellt werden.
So das Prinzip, nun zum Problem und Erklrung :Am Anfang eine Abfrage ob die Felder leer sind,dann ist eine leere Abfrage(hier soll rein ob txt_user.Text schon in der Spalte user vorhanden ist).Wenn nicht sollen die Daten in der DB gespeichert werden in der Tabelle ist noch ein Feld ID dieses soll automatisch gefullt werden.
nun zum Problem:
Die 2 if Anweisung ist leer, die Automatische eintragung der ID geht nicht obwohl ID auf AUTO_INCREADET steht, wenn ich den SQL Text änder dass ich eine Zahl bei ID eingebe Zeigt er an das gespeichert würde, wenn ich aber die Tabelle abrufe ist nichts gespeichert.
Danke schonmal im Vorraus 😃

nun der Code:

if (txt_pw.Text != "" & txt_name.Text != "")
            {
               // if()
                {
                SqlConnection verbindung = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=I:\Melody Tagebuch\Melody Tagebuch\dbc\db.mdf;Integrated Security=True;Connect Timeout=30;");
                SqlCommand Queri = new SqlCommand();
                SqlDataReader dr;
                verbindung.Open();
                Queri.Connection = verbindung;
                Queri.CommandText = "INSERT INTO acc ([user],pw) VALUES ('" + txt_name.Text.ToCharArray() + "','" + txt_pw.Text.ToCharArray() + "')";
                dr = Queri.ExecuteReader();
                verbindung.Close();
                MessageBox.Show("Regestrierung Abgeschlossen!", "Meldung!");
                this.Close();
                }//else
                {
                    MessageBox.Show("Benutzername schon Vorhanden!", "Meldung!");
                }
771 Beiträge seit 2009
vor 10 Jahren

Hi,

der Hauptfehler ist die Verwendung der falschen Methode ExecuteReader(), denn du willst ja keine Daten abrufen sondern hinzufügen. Dafür gibt es die Methode ExecuteNonQuery() (hier siehst du auch wie man Query richtig schreibt 😉).

Dann hast du noch andere Unschönheiten in deinem Code:

Du solltest außerdem deinen Beitrag noch mal editieren und C#-Tags setzen, damit man den Sourcecode besser hier lesen kann.

T
TorresDennis Themenstarter:in
5 Beiträge seit 2014
vor 10 Jahren

Habe den code nun geändert ... die ID lässt sich nicht automatisch erstellen da kriege ich immer eine fehlermeldung und auch wenn ich selber eine id eintragen lasse ist der eintrag nicht in der db gespeichert 😕

 public int neuer_nutzer(string user, string pw)
        {
            using (SqlConnection connection = new SqlConnection(verbindung))
            {
                connection.Open();
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("INSERT INTO [acc] ([user], [pw])");
                sb.AppendLine("OUTPUT INSERTED.ID");
                sb.AppendLine("VALUES ('"+user+"', '"+pw+"')");

                using (SqlCommand cmd = new SqlCommand(sb.ToString(), connection))
                {
                    cmd.Parameters.AddWithValue("user", user);
                    cmd.Parameters.AddWithValue("pw", pw );
                    return cmd.ExecuteNonQuery();
                }
            }
        } 
private void button1_Click(object sender, EventArgs e)
        {
            neuer_nutzer(txt_name.Text, txt_pw.Text);
            MessageBox.Show("Nutzer Erstellt", "Meldung!");
        }

und wenn ich dann die speicherung habe dann fehlt nur noch das ich die abfrage mache ob der nutzer schon vorhanden ist dass weis ich auch nicht wie 😕

16.835 Beiträge seit 2008
vor 10 Jahren

da kriege ich immer eine fehlermeldung

Beachte [Artikelserie] SQL: Parameter von Befehlen und [Hinweis] Wie poste ich richtig? Punkt 5

Wie man die DB fragt, ob ein gewisser Eintrag schon existiert, gehört zu den Grundlagen, die wir als Bekannt voraussetzen.
W3Schools SQL Tutorial
Jedenfalls macht es keinen Sinn, dass Du irgendwo Code kopierst und gar nicht verstehst, was er tut.

T
TorresDennis Themenstarter:in
5 Beiträge seit 2014
vor 10 Jahren

c# Verstehe ich ja nun bin ich dabei zu lernen wie ich mit datenbanken arbeite, da ich mir das selbst anlerne kopiere ich anfangs erst und bearbeite fehler mit hilfe des internets nur finde ich da mal nichts und frage (so lerne ich das) und die zeilen die ich gepostet habe verstehe ich

Die Genaue Fehlermeldung :
Ein Ausnahmefehler des Typs "System.Data.SqlClient.SqlException" ist in System.Data.dll aufgetreten.

Zusätzliche Informationen: Cannot insert the value NULL into column 'ID', table 'I:\MELODY TAGEBUCH\MELODY TAGEBUCH\DBC\DB.MDF.dbo.acc'; column does not allow nulls. INSERT fails.

Die Tabelle ist eig so eingestellt das ID sich Automatisch erhöht

16.835 Beiträge seit 2008
vor 10 Jahren

Wie gesagt: beschäftige Dich mit einem ordentlichen SQL Tutorial.
Wir helfen Dir bei konkreten Probleme aber wir übernehmen keine Lehrer-Tätigkeiten; die Grundlagen kannst Du Dir alle selbst beibringen. Und das, was Dir aktuell an Verständnis fehlt, sind eben genau diese Grundlagen.

Auch dass Du C# verstehst bin ich mir nicht ganz so sicher 😉
Du liest Dir nicht mal die Links von uns richtig durch, sonst würden Dir Fehler wie

sb.AppendLine("OUTPUT INSERTED.ID");
sb.AppendLine("VALUES ('"+user+"', '"+pw+"')");

using (SqlCommand cmd = new SqlCommand(sb.ToString(), connection))
{
cmd.Parameters.AddWithValue("user", user);
cmd.Parameters.AddWithValue("pw", pw );

einfach gar nicht passieren. Und vor allem verwendest Du immer noch einen StringBuilder!!

a) Lies ein ordentliches Tutorial
b) Lies unsere Links durch - und versteh sie
c) Trenne Schichten in der Anwendung sauber. Zb Repository Pattern.
d) arbeite gegen einen echten SQL Server und nicht mit lokalen Datenbankdateien!

Und auch Dein Schema scheint nicht zu stimmen; denn nur weil es einen AutoIncrement hat heisst es nicht, dass es automatisch gesetzt wird. Daher auch der Null-Fehler.

3.825 Beiträge seit 2006
vor 10 Jahren

Schau auch hier :

http://www.seven-c.de/files/datenbankenhowto.htm#7

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

T
TorresDennis Themenstarter:in
5 Beiträge seit 2014
vor 10 Jahren

Danke bernd habe es soweit geschafft nun muss ich nur noch die id ausfüllen lassen aber die steht ja auf autoincrease mal sehen wie ich das schaffe ^^