คุณใช้ varchar (MAX) ขนาดใดในการประกาศพารามิเตอร์ของคุณ


190

ปกติฉันจะตั้งขนาดคอลัมน์เมื่อสร้างพารามิเตอร์ใน ADO.NET

แต่ฉันจะใช้ขนาดใดถ้าคอลัมน์เป็นVARCHAR(MAX)อย่างไร

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

คำตอบ:


288

ในกรณีนี้คุณใช้ -1


5
มีข้อเสียเปรียบประสิทธิภาพใด ๆ ในการตั้งค่าความยาวพารามิเตอร์ทั้งหมดถึง -1 ดังนั้นฉันไม่จำเป็นต้องรักษารายการที่ตรงกัน db?
Andrew Bullock

1
Varchar (สูงสุด) ได้รับการปฏิบัติเหมือนกันกับ varchar (8000) สำหรับค่าที่น้อยกว่า 8000 ไบต์ สำหรับค่าที่มากขึ้นฟิลด์จะถือว่าเป็นฟิลด์ "ข้อความ" (หรือที่รู้จักว่า "CLOB") สิ่งนี้อาจส่งผลต่อการปรับแผนแบบสอบถามให้มีประสิทธิภาพและประสิทธิภาพของการดึงแถวที่มีค่ามากขึ้นในคอลัมน์นี้เนื่องจากข้อมูลจะถูกเก็บไว้ "นอกแถว" ซึ่งต้องการการค้นหาเพิ่มเติม
KeithS

ใช้ nvarchar (สูงสุด) ใน sql และกำหนดความยาว -1 ด้วย SqlDbType.NVarchar ใน c #
Romil Kumar Jain

ถ้าไม่ใช่สำหรับคำตอบของ Sam Meshesha ด้านล่าง - ฉันจะพลาดคำตอบของคุณ คำตอบของคุณอาจได้รับการโหวตมากขึ้นถ้าคุณใส่บรรทัดตัวอย่างของรหัสที่จัดรูปแบบเป็นรหัส
qxotk

51

สำหรับพวกเราที่ไม่เห็น -1 โดย Michal Chaniewski รหัสที่สมบูรณ์:

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

2

ขนาดสูงสุดของ SqlDbType.VarChar คือ 2147483647

หากคุณจะใช้การเชื่อมต่อ oledbทั่วไปแทน sql ฉันพบว่าที่นี่ยังมีประเภทข้อมูล LongVarChar ขนาดสูงสุดของมันคือ 2147483647

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

1

คุณไม่จำเป็นต้องผ่านพารามิเตอร์ขนาดเพียงแค่ประกาศVarcharแล้วเข้าใจว่ามันเป็น MAX ชอบ:

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

1
สิ่งนี้อาจมีผลเสียต่อเซิร์ฟเวอร์ SQL ของคุณเนื่องจากวิธีการคำนวณแผนการดำเนินการ
yaakov

ฉันพบว่านี่ไม่ใช่กรณีเมื่อใช้พารามิเตอร์เอาต์พุต มันส่งผลให้เกิดข้อผิดพลาดต่อไปนี้ `ข้อยกเว้น: สตริง [2]: คุณสมบัติขนาดมีขนาดไม่ถูกต้องเป็น 0 'เพื่อแก้ไขปัญหานี้ให้ใช้ Size = -1 ดูstackoverflow.com/questions/21087950/ …
Michael K

1

หากคุณทำสิ่งนี้:

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

ขนาดจะถูกนำมาจาก "ข้อความขนาดใหญ่บางส่วน" ความยาว

นี่อาจเป็นปัญหาได้เมื่อมันเป็นพารามิเตอร์เอาต์พุตคุณจะไม่ได้รับตัวอักษรกลับมาอีกแล้วจึงใส่เป็นอินพุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.