Berapa ukuran yang Anda gunakan untuk varchar (MAX) dalam deklarasi parameter Anda?

190

Saya biasanya menetapkan ukuran kolom saya ketika membuat parameter di ADO.NET

Tapi ukuran apa yang saya gunakan jika kolomnya VARCHAR(MAX)?

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

Jawaban:

288

Dalam hal ini Anda menggunakan -1.

Michał Chaniewski
sumber
5
apakah ada kelemahan kinerja untuk mengatur semua panjang parameter menjadi -1, jadi saya tidak perlu mempertahankan daftar yang sesuai db?
Andrew Bullock
1
Varchar (maks) diperlakukan identik dengan varchar (8000) untuk nilai yang kurang dari 8000 byte. Untuk nilai yang lebih besar, bidang ini diperlakukan sebagai bidang "teks" (alias "CLOB"). Ini dapat memengaruhi optimisasi rencana kueri dan efisiensi pengambilan baris dengan nilai lebih besar di kolom ini, karena data disimpan "di luar baris" yang membutuhkan pencarian tambahan.
KeithS
Gunakan nvarchar (maks) dalam sql dan tentukan panjang -1 dengan SqlDbType.NVarchar di c #
Romil Kumar Jain
Jika bukan karena jawaban oleh Sam Meshesha di bawah ini - saya akan merindukan jawaban Anda. Jawaban Anda mungkin mendapatkan lebih banyak suara jika Anda menempatkan baris contoh kode yang diformat sebagai kode.
qxotk
51

Bagi kita yang tidak melihat -1 oleh Michal Chaniewski, baris kode lengkap:

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

Ukuran SqlDbType.VarChar maksimum adalah 2147483647.

Jika Anda akan menggunakan koneksi oledb generik alih-alih sql, saya temukan di sini juga ada datatype LongVarChar. Ukuran maksimalnya adalah 2147483647.

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

Anda tidak perlu melewati parameter ukuran, cukup menyatakan Varcharsudah mengerti bahwa itu MAX seperti:

cmd.Parameters.Add("@blah",SqlDbType.VarChar).Value = "some large text";
Igor Macedo
sumber
1
Ini dapat memiliki efek negatif pada server SQL Anda karena bagaimana Rencana Eksekusi dihitung.
yaakov
Saya menemukan ini tidak menjadi kasus ketika menggunakan parameter output. Ini menghasilkan kesalahan berikut `Pengecualian: String [2]: properti Ukuran memiliki ukuran tidak valid 0.` Untuk memperbaikinya, gunakan Ukuran = -1 lihat stackoverflow.com/questions/21087950/…
Michael K
1

Jika Anda melakukan sesuatu seperti ini:

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

ukuran akan diambil dari "beberapa teks besar". Panjang

Ini bisa menjadi masalah ketika itu merupakan parameter output, Anda tidak mendapatkan kembali karakter lebih dari yang Anda masukkan sebagai input.

Alberto Tromba
sumber