在对抗性的环境/时间限制下,我将一个程序打包在一起,该程序通过ODBC连接创建记录,现在情况已经结束,我想对其进行改进。突出的事情之一是能够使用SQL注入功能来创建语句。
我当前正在插入其中的表的示例:
IconButtons
预处理语句的工作方式是先使用
声明密钥INSERT INTO table1
(..., value1, foreign_key_1)
VALUES
(..., 'myvalue', (SELECT key FROM othertable WHERE othertable.name = 'some payment type'));
然后再创建@identifier
的实例,添加类型和值,将创建的参数添加到语句,使用SqlParameter
进行准备,最后运行它。
现在,我想更改手动创建的INSERT以使用SqlCommand()和SqlParameter()来防止SQL注入攻击。
如何在INSERT语句中声明一个子查询来填充字段?一个直接的解决办法是拥有一个prepare()
,但似乎没有这种东西。
我使用SqlDbType.Subquery
还是SqlDbType.Structured
或SqlDbType.Udt
,还是SqlDbType.Variant
不支持的功能?