2
我试图使用Npgsql的PostgreSQL客户端来完成两件事情:如何避免在Npgsql中使用更新命令进行SQL注入?
- 避免SQL注入,并
- 管理包含单引号'数据
我看不出怎么办任:(
PostrgeSQL版本9.1
在下面的代码,dx.chronic是bool类型2及Ta的cdesc ble dx可能包含单引号,如“汤姆的狗”。显然,当Npgsql/PostgreSQL遇到单引号时,写成的UpdateCmd将会失败。
string sChronic = (dx.chronic == null) ? "null" : dx.chronic.ToString();
string UpdateCmd = "update dx "+
"set chronic = " + sChronic +
" where (trim(lower(cdesc)), trim(cicd9)) = "+
" ('"+dx.description.Trim().ToLower()+"','"+dx.icd9.Trim() +"');";
using (NpgsqlCommand command = new NpgsqlCommand(UpdateCmd, conn))
{
command.Parameters.Add(new NpgsqlParameter("value1", NpgsqlDbType.Text));
command.Parameters[0].Value = "Big Tom's Dog";
....... ? ? ? ? ? ? ? ? ? ? ? ? ? ...................
这是如何完成的?任何帮助最受赞赏。
TIA
参见“准备语句”的[文件](https://github.com/npgsql/npgsql/wiki/User-Manual)。手动编写查询字符串非常容易出错,所以请尽可能避免使用字符串连接插入数据。也尝试和碰撞你的Postgres版本,9.4增加了很多值得拥有的新功能。 – tadman
@tadman当它是记录的一部分时,我仍然不知道如何处理单引号,或者它没有关系?谢谢。 –
担心引号是你没有正确转义的标志。执行此操作的最佳方法是数据库驱动程序处理转义的**准备语句**。 – tadman