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;

Jawaban:


288

Dalam hal ini Anda menggunakan -1.


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

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

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.