ใน C # 6 มีคุณสมบัติใหม่: สตริงที่ถูกสอดแทรก
สิ่งเหล่านี้ช่วยให้คุณสามารถใส่นิพจน์ลงในโค้ดได้โดยตรงแทนที่จะใช้ดัชนี:
string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y());
กลายเป็น:
string s = $"Adding \"{x}\" and {this.Y()} to foobar.";
อย่างไรก็ตามเรามีสตริงจำนวนมากในหลายบรรทัดโดยใช้สตริงคำต่อคำ (ส่วนใหญ่เป็นคำสั่ง SQL) ดังนี้:
string s = string.Format(@"Result...
Adding ""{0}"" and {1} to foobar:
{2}", x, this.Y(), x.GetLog());
การเปลี่ยนกลับเป็นสตริงปกติดูเหมือนจะยุ่งเหยิง:
string s = "Result...\r\n" +
$"Adding \"{x}\" and {this.Y()} to foobar:\r\n" +
x.GetLog().ToString();
ฉันจะใช้ทั้งคำต่อคำและสตริงที่ถูกสอดแทรกร่วมกันได้อย่างไร
3
หากเป็นเรื่องเกี่ยวกับสตริง SQL จริงๆมีเหตุผลใดบ้างที่คุณไม่ใช้การสืบค้นแบบพาราเมตริกแทน
—
svick
"เรามีสตริงจำนวนมากในหลายบรรทัดโดยใช้สตริงคำต่อคำ (ส่วนใหญ่เป็นคำสั่ง SQL)" ดูเหมือนว่าคุณมีสตริง SQL จำนวนมากที่เปิดใช้งานการโจมตีด้วยการแทรก SQL
—
Cetin Basoz
@svick เราคือทุกสิ่งที่ผู้ใช้ป้อนจะถูกกำหนดพารามิเตอร์ เรายังคงใช้ไดนามิก SQL เป็นอย่างมากเนื่องจากเราสร้าง SQL แบบไดนามิกสำหรับเอนทิตีของเราในโค้ด
—
Keith
@CetinBasoz เราไม่ - อินพุตของผู้ใช้ทั้งหมดถูกกำหนดพารามิเตอร์ มีหลายสถานการณ์ที่คุณมี SQL แบบไดนามิกเช่น LINQ หรือกรอบการทำแผนที่วัตถุอื่น ๆ
—
Keith