在oracle中防止SQL注入
首先我尝试使用以下代码
strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper('" + UserPrefix + "')"; try { ocommand = new OracleCommand(); if (db.GetConnection().State == ConnectionState.Open) { ocommand.CommandText = strQuery; ocommand.Connection = db.GetConnection(); odatareader = ocommand.ExecuteReader(); odatareader.Read();
最后我转换了上面的查询,以防止像这样的SQL注入
strQuery = @"SELECT PASSWORD FROM IBK_USERS where upper(user_id) =upper(:UserPrefix)"; try { ocommand = new OracleCommand(); if (db.GetConnection().State == ConnectionState.Open) { ocommand.CommandText = strQuery; ocommand.Connection = db.GetConnection(); ocommand.Parameters.Add(":UserPrefix",OracleDbType.Varchar2,ParameterDirection.Input); ocommand.Parameters[":UserPrefix"].Value = UserPrefix; odatareader = ocommand.ExecuteReader();
但这不起作用
删除参数名称前面的冒号。 而不是……
ocommand.Parameters.Add(":UserPrefix", ...);
…做这个…
ocommand.Parameters.Add("UserPrefix", ...);
同样用于设置参数值。
与您的问题没有直接关系:在WHERE子句中使用upper(user_id)
可能需要基于函数的索引才能有效运行。 另外, user_id
确实需要是一个字符串 – 你能不能只使它成为整数?
- Transactionscope或IDbTransaction
- 如何在使用ExecuteNonQuery()时收到错误消息?
- 用于x64应用程序的Microsoft.ACE.OLEDB.12.0驱动程序 – 如何使其与x86 MS Office一起安装?
- 重新加载实体和所有导航属性关联 – DbSetentity framework
- SqlBulkCopyerror handling/继续错误
- 使用ADO.NETentity framework时出错
- VS2010在设计器模式下打开我的类文件(.cs)
- 在MVC3中使用ADO.NET MySQL提供程序(无法找到请求的.Net Framework数据提供程序。可能未安装。)
- 为什么在C#时分号不能放在OracleCommand的CommandText中