首先我尝试使用以下代码
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", ...);
同上,用于设置参数值。
与您的问题没有直接关系:upper(user_id)在WHERE子句中使用可能需要基于函数的索引才能有效运行。另外,user_id真的需要一个字符串吗?您是否只能将其设置为整数?
upper(user_id)
user_id