Parametre bildiriminizde varchar (MAX) için hangi boyutu kullanıyorsunuz?


190

Normalde ADO.NET'te bir parametre oluştururken sütun boyutumu ayarladım

Ancak sütun ise hangi boyutu kullanırım VARCHAR(MAX)?

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

Yanıtlar:


288

Bu durumda -1 kullanırsınız.


5
-1 için tüm parametre uzunluklarını ayarlamak için herhangi bir performans dezavantajı var, bu yüzden bir db eşleme listesi korumak zorunda değil misiniz?
Andrew Bullock

1
Varchar (max), 8000 bayttan daha düşük değerler için varchar (8000) ile aynı şekilde işlenir. Daha büyük değerler için bu alana "metin" alanı (diğer adıyla "CLOB") adı verilir. Bu, sorgu planı optimizasyonunu ve veriler ekstra bir arama gerektiren "sıra dışı" olarak depolandığından, bu sütundaki daha büyük değerlere sahip satırları alma verimliliğini etkileyebilir.
KeithS

Sql içinde nvarchar (max) kullanın ve c #
SqlDbType.NVarchar

Aşağıdaki Sam Meshesha'nın cevabı olmasaydı, cevabınızı kaçırırdım. Kod olarak biçimlendirilmiş örnek bir kod satırı koyarsanız cevabınız daha fazla oy alabilir.
qxotk

51

Michal Chaniewski'nin -1 kodunu görmeyenlerimiz için, kodun tamamı:

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

2

Maksimum SqlDbType.VarChar boyutu 2147483647'dir.

Sql yerine genel bir oledb bağlantısı kullanırsanız, burada da bir LongVarChar veri türü olduğunu buldum . Maksimum boyutu 2147483647'dir.

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

1

Size parametresini geçmek gerekmez, sadece Varcharzaten MAX gibi anladığını beyan beyan :

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

1
Bunun, Yürütme Planı'nın hesaplanması nedeniyle SQL sunucunuz üzerinde olumsuz etkileri olabilir.
yaakov

Bir çıkış parametresi kullanırken bunun böyle olmadığını gördüm. Bu şu hatayla sonuçlanır: `İstisna: Dize [2]: Size özelliği 0 boyutunda geçersiz. Bunu düzeltmek için Size = -1 kullanın stackoverflow.com/questions/21087950/…
Michael K

1

Böyle bir şey yaparsanız:

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

boyutu "bazı büyük metin" alınacaktır. uzunluk

Bu bir çıkış parametresi olduğunda sorunlu olabilir, girdi olarak koyduğunuzdan daha fazla karakter geri alamazsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.