c# mysql executenonquery_c# – 使用ExecuteReader而不是ExecuteNonQuery

本文探讨了在构建SQL查询时使用字符串拼接所带来的安全隐患,特别是SQL注入风险,并提出了使用参数化查询作为解决方案的方法。此外,还介绍了如何通过try/finally块或using语句来妥善管理数据库连接。
摘要由CSDN通过智能技术生成

您只需将额外的INSERT与SELECT与ExecuteReader()捆绑在一起即可.这没关系.

我确实看到两件可能不合适的东西……代码本身没什么,但是你展示的内容是简化的,简化的代码暗示了一些潜在的不良做法:

第一个不合适的是你的代码看起来可能正在使用字符串连接来将值替换为查询.像这样的东西:

MysqLCommand cmd = new MysqLCommand

(@"INSERT INTO Table(field) VALUES('" + somevariable + "');" +

"SELECT * FROM table",cn);

这是一个巨大的问题,因为它在您的应用程序中打开了一个巨大的安全漏洞.相反,您需要使用查询参数,因此代码看起来更像这样:

MysqLCommand cmd = new MysqLCommand

(@"INSERT INTO Table(field) VALUES(@somevalue);" +

"SELECT * FROM table",cn);

cmd.Parameters.Add("@somevalue",sqlDbType.VarChar,50).Value = somevariable;

另一个潜在的问题是你的命令,更重要的是你的连接,应该包含在try / finally块中(或者首选使用块),如下所示:

using (var cn = new MysqLConnection("..."))

using (var cmd = new MysqLCommand("@INSERT INTO Table(field).... ",cn))

{

cmd.Parameters.Add(...);

cn.Open();

using (var rdr = cmd.ExecuteReader())

{

while (rdr.Read())

{

//...

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值