Kích thước nào bạn sử dụng cho varchar (MAX) trong khai báo tham số của bạn?


190

Tôi thường đặt kích thước cột của mình khi tạo tham số trong ADO.NET

Nhưng kích thước nào tôi sử dụng nếu cột là VARCHAR(MAX)?

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

Câu trả lời:


288

Trong trường hợp này, bạn sử dụng -1.


5
Có bất kỳ nhược điểm nào về hiệu suất khi đặt tất cả độ dài tham số thành -1, vì vậy tôi không phải duy trì danh sách khớp db?
Andrew Bullock

1
Varchar (max) được xử lý giống hệt với varchar (8000) cho các giá trị nhỏ hơn 8000 byte. Đối với các giá trị lớn hơn, trường được coi là trường "văn bản" (còn gọi là "CLOB"). Điều này có thể ảnh hưởng đến tối ưu hóa kế hoạch truy vấn và hiệu quả của việc truy xuất các hàng có giá trị lớn hơn trong cột này, vì dữ liệu được lưu trữ "ngoài luồng" yêu cầu tra cứu thêm.
KeithS

Sử dụng nvarchar (tối đa) trong sql và xác định độ dài -1 với SqlDbType.NVarchar trong c #
Romil Kumar Jain

Nếu đó không phải là câu trả lời của Sam Meshesha bên dưới - tôi đã bỏ lỡ câu trả lời của bạn. Câu trả lời của bạn có thể nhận được nhiều phiếu hơn nếu bạn đặt một dòng mã mẫu được định dạng dưới dạng mã.
qxotk

51

Đối với những người trong chúng ta không thấy -1 của Michal Chaniewski, dòng mã hoàn chỉnh:

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

2

Kích thước SqlDbType.VarChar tối đa là 2147483647.

Nếu bạn sẽ sử dụng kết nối oledb chung thay vì sql, tôi thấy ở đây cũng có kiểu dữ liệu LongVarChar. Kích thước tối đa của nó là 2147483647.

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

1

Bạn không cần phải truyền tham số kích thước, chỉ cần khai báo Varcharđã hiểu rằng đó là MAX như sau:

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

1
Điều này có thể có tác động tiêu cực đến máy chủ SQL của bạn do cách tính Kế hoạch thực hiện.
yaakov

Tôi thấy đây không phải là trường hợp khi sử dụng một tham số đầu ra. Nó dẫn đến việc lỗi `ngoại lệ sau: String [2]: Kích thước tài sản có kích thước không hợp lệ của 0.` Để sửa lỗi này, sử dụng Kích thước = -1 thấy stackoverflow.com/questions/21087950/...
Michael K

1

Nếu bạn làm một cái gì đó như thế này:

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

kích thước sẽ được lấy từ "một số văn bản lớn". Chiều dài

Điều này có thể có vấn đề khi đó là một tham số đầu ra, bạn không nhận được thêm ký tự nào sau đó bạn đặt làm đầu vào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.