ExecuteScalar-call wirft exception "Object reference not set to an instance of an object"
Beim Debuggen die folgende Methode in einem unit-test erhalte ich die folgende Fehlermeldung
Objektverweis nicht auf eine Instanz eines Objekts
beim Auftreffen auf die folgende Zeile
result = (int)validateDatabase.ExecuteScalar();
Die Methode ist
public static Boolean Validate(string argument1, string argument2)
{
int result = -1;
using (var connection = new SqlConnection("connection string"))
{
SqlCommand validateDatabase = new SqlCommand("PROCEDURE NAME", connection);
validateDatabase.CommandType = System.Data.CommandType.StoredProcedure;
validateDatabase.Parameters.Add("@PARAMETER1", System.Data.SqlDbType.NVarChar).Value = argument1;
validateDatabase.Parameters.Add("@PARAMETER2", System.Data.SqlDbType.NVarChar).Value = argument2;
try
{
connection.Open();
result = (int)validateDatabase.ExecuteScalar();
}
catch (SqlException exception) { Trace.WriteLine("exception.Message); }
finally { connection.Close(); }
}
return (int)result == 0 ? true : false;
}
- Sollten Sie var
connection = new SqlConnection(hereComesTheConnectionString)
- Es ist schon, ich habe den Fehler gemacht, mit einer varialbe Namen als Platz Halter name, Ich habe das jetzt geändert
Du musst angemeldet sein, um einen Kommentar abzugeben.
ExecuteScalar
null zurückgeben, wenn das Ergebnis ist null, entsprechend der MSDN. Dies bedeutet, dass Ihre Stimmen ungültigSehen Sie sich hier die Dokumentation SqlCommand.ExecuteScalar
Wenn Sie möchten, dass cast zu arbeiten, ändern Sie es, um eine null -
int
The first column of the first row in the result set, or a null reference (Nothing in Visual Basic) if the result set is empty.
Also ich gehe davon aus, dass die Ergebnismenge leer ist.Ich habe gerade ein ähnliches problem erlebt. Was ich Tat, war, wählen Sie eine int-Spalte aus einem bestimmten Datensatz in einer Tabelle, aber es geschah der Wert der Spalte ist 0. Folgt die Ausnahme verursacht "Objektverweis nicht auf eine Instanz eines Objekts":
Meine Lösung war, ändern Sie den obigen code:
Diese vermieden die Ausnahme.
ExecuteScalar: Führt die Abfrage aus und gibt die erste Spalte der ersten Zeile in der Ergebnismenge der Anfrage zurück. Zusätzliche Spalten oder Zeilen werden ignoriert.
Versuchen Sie "SELECT CAST(scope_identity() AS int)" am Ende der Abfrage.
Du machst es eher falsch - versuchen Sie anrufen
SqlDataReader
fürvalidateDatabase.ExecuteScalar()
Ergebnisse