提问人:Yabaz Thampi 提问时间:4/26/2019 最后编辑:Andrew MortonYabaz Thampi 更新时间:4/26/2019 访问量:685
SQL中单引号和双引号有什么用?[复制]
What is the use of single and double quotes in SQL? [duplicate]
问:
我正在将字符串或数字传递给 SQL 查询。
单引号和双引号内的单引号是什么意思?
select * from college where class = '"+txtclass.Text+"'
或
select * from college where class = '+txtclass.Text+'
答:
-1赞
Camadas
4/26/2019
#1
应使用 SqlCommand 的参数。
这里有一个小例子来说明如何做到这一点:
using (var con = new SqlConnection("conection string"))
{
con.Open();
using (var cmd = con.CreateCommand())
{
// Here is where we add the parameters into the Sql Query, this way it will prevent SQL Injection
cmd.CommandText = "select * from college where class = @class";
// Now we add the value to the parameter @class, I'm assuming here that the column class is a NVarchar
cmd.Parameters.Add("@class", SqlDbType.NVarChar).Value = txtclass.Text;
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// Do some code
}
dr.Close();
}
}
}
这个例子是针对 Sql 的,但也可以对 MySql 做同样的事情,我们只需要使用 MySql 类,其余的都是一样的
注意:我知道这并不能回答已经提出的问题,但是由于他的方式存在安全风险,我决定举一个简单的例子如何使其更安全,因为在对问题的评论中给出了答案
评论
1赞
SMor
4/26/2019
不要使用 addwithvalue
0赞
Camadas
4/26/2019
嗯,感谢您的警告,我确实使用了 AddWithValue,因为它需要更少的代码。需要多研究一点,以便我可以更改必须删除 AddWithValue 的解决方案
1赞
Andrew Morton
4/29/2019
@Camadas 应指定字符串参数的大小,否则它可能默认为 1 并以静默方式截断数据。
评论