Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum erhalte ich beim Einfügen von Daten in MySQL mit C# die Fehlermeldung „Personenspalte darf nicht Null sein'?

Barbara Streisand
Freigeben: 2024-11-09 08:00:03
Original
346 Leute haben es durchsucht

Why Am I Getting a

C# mit MySQL-INSERT-Parametern

Die Verwendung von Parametern in MySQL-INSERT-Anweisungen ist eine entscheidende Vorgehensweise zur Wahrung der Datenintegrität und zur Verhinderung von SQL-Injection-Angriffen. Sie sind jedoch auf Probleme mit Ihrem Code gestoßen, und wir sind hier, um Ihnen bei der Lösung zu helfen.

Ursprüngliches Problem:

In Ihrem ursprünglichen Code, Sie hat versucht, eine INSERT-Anweisung mit Parametern auszuführen, indem:

comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
Nach dem Login kopieren

Die Fehlermeldung „Personenspalte darf nicht null sein“ zeigt jedoch an, dass Sie das Festlegen eines Werts für den Personenparameter versäumt haben.

Lösung:

Um dieses Problem zu beheben, müssen Sie den Parametern Werte zuweisen:

comm.Parameters.Add("@person", MySqlDbType.VarChar).Value = "Myname";
comm.Parameters.Add("@address", MySqlDbType.VarChar).Value = "Myaddress";
Nach dem Login kopieren

SQL-Injection-Schwachstelle:

Sie haben auch erwähnt, dass die Verwendung einer Literalzeichenfolge in der INSERT-Anweisung (z. B. „INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')") keinen Fehler erzeugt. Diese Vorgehensweise ist jedoch anfällig für SQL-Injection-Angriffe, bei denen böswillige Benutzer die Eingabe manipulieren können, um beliebige SQL-Befehle auszuführen.

Alternative Lösung:

Stattdessen können Sie Folgendes verwenden die AddWithValue-Methode, die die Parametrisierung automatisch übernimmt und SQL-Injection verhindert:

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
Nach dem Login kopieren

Fragezeichen verwenden:

Eine andere Möglichkeit besteht darin, Fragezeichen als Platzhalter für Parameter zu verwenden. wie:

comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
Nach dem Login kopieren

Stellen Sie sicher, dass Sie den MySQL-Datentyp für jeden Parameter mithilfe der MySqlDbType-Enumeration angeben.

Indexbasierte Parameter:

Ihr Versuch, indexbasierte Parameter (z. B. cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;) zu verwenden, ist ungültig. Der indexbasierte Ansatz gilt für gespeicherte Prozeduren, nicht für parametrisierte Abfragen.

Gelöster Code:

Letztendlich wurde Ihr Code mithilfe des folgenden Ansatzes aufgelöst:

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();
Nach dem Login kopieren

Dieser Code führt die INSERT-Anweisung erfolgreich aus und schützt gleichzeitig vor SQL-Injection.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Einfügen von Daten in MySQL mit C# die Fehlermeldung „Personenspalte darf nicht Null sein'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage