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

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-09 08:00:03422Durchsuche

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");

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";

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");

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");

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();

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!

Stellungnahme:
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