Welche Größe verwenden Sie für varchar (MAX) in Ihrer Parameterdeklaration?

190

Normalerweise lege ich meine Spaltengröße fest, wenn ich einen Parameter in ADO.NET erstelle

Aber welche Größe verwende ich, wenn die Spalte ist VARCHAR(MAX)?

cmd.Parameters.Add("@blah", SqlDbType.VarChar, ?????).Value = blah;
mrblah
quelle

Antworten:

288

In diesem Fall verwenden Sie -1.

Michał Chaniewski
quelle
5
Gibt es einen Leistungsnachteil beim Festlegen aller Parameterlängen auf -1, sodass ich keine Datenbank-Matching-Liste führen muss?
Andrew Bullock
1
Varchar (max) wird für Werte unter 8000 Byte identisch mit varchar (8000) behandelt. Bei größeren Werten wird das Feld als "Text" -Feld (auch als "CLOB" bezeichnet) behandelt. Dies kann sich auf die Optimierung des Abfrageplans und die Effizienz beim Abrufen von Zeilen mit größeren Werten in dieser Spalte auswirken, da die Daten "außerhalb der Zeile" gespeichert werden und eine zusätzliche Suche erforderlich ist.
KeithS
Verwenden Sie nvarchar (max) in SQL und definieren Sie die Länge -1 mit SqlDbType.NVarchar in c #
Romil Kumar Jain
Ohne die Antwort von Sam Meshesha unten hätte ich Ihre Antwort verpasst. Ihre Antwort erhält möglicherweise mehr Stimmen, wenn Sie eine als Code formatierte Beispielcodezeile eingeben.
qxotk
51

Für diejenigen von uns, die -1 von Michal Chaniewski nicht gesehen haben, die vollständige Codezeile:

cmd.Parameters.Add("@blah",SqlDbType.VarChar,-1).Value = "some large text";
Sam Meshesha
quelle
2

Die maximale Größe von SqlDbType.VarChar beträgt 2147483647.

Wenn Sie ein Generikum verwenden würden oledb-Verbindung anstelle von SQL verwenden würden, habe ich hier auch einen LongVarChar-Datentyp gefunden. Die maximale Größe beträgt 2147483647.

cmd.Parameters.Add("@blah", OleDbType.LongVarChar, -1).Value = "very big string";
Eric Draven
quelle
1

Sie müssen den Größenparameter nicht übergeben, sondern müssen nur erklären Varchar, dass er MAX-artig ist:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
Igor Macedo
quelle
1
Dies kann sich aufgrund der Berechnung des Ausführungsplans negativ auf Ihren SQL Server auswirken.
Yaakov
Ich habe festgestellt, dass dies bei Verwendung eines Ausgabeparameters nicht der Fall ist. Dies führt zu folgendem Fehler: "Ausnahme: Zeichenfolge [2]: Die Size-Eigenschaft hat eine ungültige Größe von 0." Um dies zu beheben, verwenden Sie Size = -1 (siehe stackoverflow.com/questions/21087950/…
Michael K,
1

Wenn Sie so etwas tun:

    cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";

Größe wird aus "etwas großem Text" entnommen. Länge

Dies kann problematisch sein, wenn es sich um einen Ausgabeparameter handelt. Sie erhalten nicht mehr Zeichen zurück, als Sie als Eingabe eingegeben haben.

Alberto Tromba
quelle