在C#中使用Oracle参数化查询

8
string sqlCmd = @"SELECT r.row_id AS resp_id,
                         r.name AS resp_name
                  FROM srb.s_resp r,
                       srb.s_per_resp pr,
                       srb.s_contact c,
                       srb.s_user u
                  WHERE r.row_id = pr.resp_id
                    AND u.row_id = c.row_id
                    AND c.person_uid = pr.per_id
                    AND UPPER(u.login) = @login
                 ORDER BY r.name";

OracleConnection con = new OracleConnection(getConnectionString(username, password));
OracleCommand command = con.CreateCommand();

conSiebel.Open();
command.CommandType = CommandType.Text;
command.Connection = con;
command.CommandText = sqlCmd;

command.Parameters.Add(new OracleParameter("login", username));

IDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
reader.Close();

我试图将@login参数添加到上面的查询中,但它没有被添加。有人可以帮我解决这个问题吗?


我首先注意到的是新的登录参数从未被分配 ParameterDirection - CDove
1
不良习惯:使用旧式JOIN语句。旧式的“逗号分隔表列表”已经在25年前被ANSI-92 SQL标准中更为合适的ANSI JOIN语法所取代,因此不建议使用。 - marc_s
1个回答

10
使用冒号代替(:login)。
 string sqlCmd = @"SELECT  r.row_id AS resp_id,
                                    r.name AS resp_name
                            FROM    srb.s_resp r,
                                    srb.s_per_resp pr,
                                    srb.s_contact c,
                                    srb.s_user u
                            WHERE   r.row_id = pr.resp_id
                                    AND u.row_id = c.row_id
                                    AND c.person_uid = pr.per_id
                                    AND UPPER(u.login) = :login
                                    ORDER BY r.name";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接