Laden...

SQLParameter und DBNull

Letzter Beitrag vor 19 Jahren 3 Posts 1.484 Views
SQLParameter und DBNull

Hi Leute,

ich habe schon im Forum gesucht, aber nichts passendes gefunden. Falls ich was übersehen habe, sry.

Also mein Problem: Ich möchte ein Select auf eine Tabelle machen. Ich mache das ganze mit Parameter.


			MySql.Data.MySqlClient.MySqlConnection conn = new MySqlConnection("server=localhost;user id=root;password=;database=a");
			conn.Open();
			MySql.Data.MySqlClient.MySqlCommand x = new MySqlCommand();
			x.Connection = conn;
			x.CommandText = "SELECT RevisionsNr FROM asdf WHERE b = ?b";
			x.Parameters.Add("b", MySql.Data.MySqlClient.MySqlDbType.VarChar);
			x.Parameters["b"].Value = DBNull.Value;
			object o = x.ExecuteScalar();
			Console.WriteLine(o);
			conn.Close();

So, wie man sieht möchte ich einen Datensatz auslesen der ein DBNull beinhaltet. Nur geht das so nicht? Bzw ich bekomme als Rückgabewert NULL. Der Rückgabewert sollte aber 3 sein. Der Syntax für eine NULL Abfrage im SQL wäre ja "IS NULL".

Muss man jetzt wirklich jedesmal überprüfen ob das Value von einem Parameter DBNull ist, und dann das Select Statement abändern?

Hallo Bakunin!

Prinzipiell ja, denn Du hast ja schon richtig erkannt, dass eine SQL-Abfrage "Irgendwas=NULL" nicht die richtige Vorgehensweise ist, daher muss das korrekt lauten "Irgendwas IS NULL".

Und genau da ist wirklich das Problem, denn in Deinem Code legst Du Dich ja schon mit "b = ?b" auf das Fragezeichen fest.

Daher solltest Du das bei der Erzeugung des Statements diesen Fall separat abfangen und dann bei Nullfeldern tatsächlich "IS NULL" schreiben, bei anderen so wie Du es getan hast.

Sorry, dass es hierfür keine hübschere Lösung gibt.

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

Danke für die Antwort.

Ich habs jetzt so gelöst, dass der ganze SQL geparsed wird, und die Parameter die ein VALUE von DBNull haben, werden durch IS NULL erstetzt.

Ist zwar nicht wirklich eine schöne Lösung.. aber naja. Ich denke es wäre durchaus von Vorteil wenn das aber anders lösbar wäre, also über die Parameter.

Bakunin