MySql Says Die Spalte darf für eine Spalte, die nicht null ist, nicht null sein!

Ich versuche, eine INSERT INTO-Abfrage mithilfe von .NET über den MySql / .NEt-Connector auszuführen. Die Abfrage verwendet Parameter. Es ist ziemlich einfach:

INSERT INTO post ( ID, content, post_url, blogID, title, addedOn, updatedDate, commentsFeedURL, active, viewCount, commentCount, languageID, authorName, postDate, posRating, negRating, adult) VALUES( @ID, @content, @post_url, @blogID, @title, @addedOn, @updatedDate, @commentsFeedURL, @active, @viewCount, @commentCount, @languageID, @authorName, @postDate, @posRating, @negRating, @adult) 

Wenn ich es starte (mit allen ordnungsgemäß zugewiesenen Parametern), erhalte ich einen Fehler

"Spalte 'post_url' darf nicht null sein"

Aber es ist nicht Null. Dies ist der Wert im Parameter post_url

http://abcd.wordpress.com/2007/08/13/%e0%a4%a6%e0%a5%8b-%e0%a4%ae%e0%a4%bf%e0%a4%a8%e0% a4% 9f-% e0% a4% 95% e0% a4% bis% e0% a4% a7% e0% a5% 8d% e0% a4% af% e0% a4% be% e0% a4% a8 /

Und das ist der Code, den ich verwende, um die Parameter der SQL-Abfrage zuzuordnen

 cmd.Parameters.AddWithValue("post_url", postOld.URL); 

Was könnte der Grund sein, dass ich dieses Verhalten bekomme?

Solutions Collecting From Web of "MySql Says Die Spalte darf für eine Spalte, die nicht null ist, nicht null sein!"

Okay Leute, ich habe endlich die richtige Antwort gefunden.

Das Problem war einfach, dass in MySQL-Abfragen Parameter mit '?' nicht '@'. Unglücklicherweise schienen viele Anfragen gut zu funktionieren (sie waren es nicht), indem sie '@' benutzten, so dass man das später herausfindet, wenn es Probleme gibt.

Danke für all deine Antworten. Ich habe meine Anfrage wie folgt neu geschrieben:

 INSERT INTO post (ID, content, post_url, blogID, title, addedOn, updatedDate, commentsFeedURL, active, viewCount, commentCount, languageID, authorName, postDate, posRating, negRating, adult)" + " VALUES(?ID, ?content, ?post_url, ?blogID, ?title, ?addedOn, ?updatedDate, ?commentsFeedURL, ?active, ?viewCount, ?commentCount, ?languageID, ?authorName, ?postDate, ?posRating, ?negRating, ?adult) 

und es hat funktioniert.

Bevor Sie die Execute-Methode aufrufen, können Sie dann überprüfen, um zu sehen, welcher Wert in jedem Parameter ist? Es ist sehr leicht, versehentlich etwas zu tun, das etwas vermasselt.

Haben Sie einen Insert-Trigger für diesen Tisch? Es könnte sein, dass der Trigger versucht, in eine andere Tabelle mit einer post_url-Spalte einzufügen, die nicht null sein kann.

Versuchen Sie, post_url vor dem Inhalt der Parameter- und Wertelisten zu verschieben, um auszuschließen, dass der Treiber die Parameter aufgrund eines komplexen Wertes in @content schlecht an MySQL übergeben hat.

Hier nicht snarky zu sein, aber deshalb sind Testfälle eine gute Sache. Schreiben Sie einen Komponententest, um zu überprüfen, ob die Übergabe eines Nicht-Null-Posturls funktioniert, und wenn Sie einen Nullwert übergeben, wird dieser Fehler von der database erhalten.

Schreiben Sie dann einen Integrationstest (oder einen Schein), um zu beweisen, dass postOld.URL nicht null ist.

Sollte die Zeile nicht so aussehen:

 cmd.Parameters.AddWithValue("@post_url", postOld.URL); 

oder können Sie das @ -Symbol weglassen?