4 Stimmen

Aufrufen von gespeicherten Prozeduren, Übergabe von NULL-Werten, Umgang mit booleschen Werten

Wenn ich eine gespeicherte Prozedur aufrufe, verkette ich Werte zusammen. Meine Frage ist, wie Sie eine gespeicherte Prozedur aufrufen, aber einen "NULL"-Wert in einem der Parameter senden?

Sagen wir, dass AID = null, aber wenn ich das zu meiner Abfrage übergeben ich einen Fehler erhalten?

QueryConn.Execute("Search_Res " & Count & "," & AccessList("InvoiceLevel") & "," & AID)

Ok, so meine nächste Frage wird sein, wie ich in eine boolesche Variable übergeben?

Innerhalb meiner gespeicherten Prozedur ist die var @SearchChildren entweder wahr oder falsch, aber wie definiere ich diese oder sollte ich mit einem int gehen und die Dinge einfach für mich und nur 0 oder 1 verwenden?

MS SQL Server 2005.

8voto

womp Punkte 113535

Es sieht so aus, als ob Sie versuchen, einen SP mit einer Ad-hoc-Abfrage und nicht mit einem ADO.Net DBCommand-Objekt auszuführen. Können Sie nicht einfach "@SearchChildren = null" zu Ihrem String hinzufügen?

Sie können die Parameterwerte auch explizit über das Befehlsobjekt setzen, das ist relativ einfach.

SqlCommand cmd = new SqlCommand("Search_Res", QueryConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchChildren", DBNull.Value);
..
..
values = cmd.Execute();

Entschuldigen Sie das C#... mein VB ist eingerostet.

1voto

Yada Punkte 28791

Ändern Sie den Parameter des Search_Res gespeicherte Prozedur optional zu sein. @parameter = NULL. Wenn der NULL-Wert übergeben wird, wird der Parameter ignoriert.

CREATE PROCEDURE dbo.foo 
    @param INT = NULL 
AS 
BEGIN ...

0voto

Dan Punkte 10758

In diesem Fall, da Sie den Prozeduraufruf und die Argumente als Literale übergeben, wollen Sie AID den Zeichenfolgenwert "null" und nicht einen Nullwert enthalten.

Alternativ dazu sollten Sie die Verwendung von Bindungsparametern in Betracht ziehen. Es sieht so aus, als ob Ihre aufrufende Sprache VB.NET ist, also weiß ich nicht genau, wie man das in dieser Sprache macht, aber es gibt viele Referenzen.

Ich habe SQL Server nicht verwendet, aber ich weiß, dass es in Oracle grundsätzlich illegal ist, boolesche Variablen an gespeicherte Prozeduren zu übergeben. Es wird empfohlen, eine INT mit einem Wert von 0 oder 1 zu verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X