这个非常重要:do not通过 SQL 使用内插字符串;这是各方面都很糟糕:
- 安全性:SQL注入
- 性能:查询计划重用
- 可靠性:带有保留符号的脆性,例如
'
- 正确性:i18n/l10n(即格式)问题 - 尤其与
DateTime
值(出生日期;“07/11/2020”是 11 月 7 日吗?还是 7 月 11 日?) - 还有学费金额(在“123,456”中,逗号是小数分隔符吗(法国等人) ?或组分隔符?)
正确的做法是参数。总是。
所以,SQL 如下:
insert into product (ID,FirstName,LastName,DateOfBirth,TuitionFees)
values (@id, @firstName, @lastName, @dateOfBirth, @tuitionFees)
为了做到这一点,either了解 ADO.NET 参数,或者:使用类似的工具Dapper这简化了它:
int id = ...
string firstName = ...
string lastName = ...
DateTime dateOfBirth = ...
double tuitionFees = ...
using var conn = new SqlConnection(con); // Dapper will deal with the open/close
conn.Execute(@"
insert into product (ID,FirstName,LastName,DateOfBirth,TuitionFees)
values (@id, @firstName, @lastName, @dateOfBirth, @tuitionFees)",
new { id, firstName, lastName, dateOfBirth, tuitionFees });
另外,最后注意:不要使用double
对于货币;使用decimal
. double
不适合货币金额。