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;

Antworten:


288

In diesem Fall verwenden Sie -1.


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";

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";

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";

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.