这是我的工作代码
strQuery = @"SELECT FROM IBK_CO_USERS where upper(user_id)= upper(:userid) AND co_id= :Com_Id";
ocommand = new OracleCommand();
if (db.GetConnection().State == ConnectionState.Open)
{
ocommand.CommandText = strQuery;
ocommand.Connection = db.GetConnection();
ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
ocommand.Parameters["userid"].Value = userID;
ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
ocommand.Parameters["Com_Id"].Value = Comid;
odatareader = ocommand.ExecuteReader();
odatareader.Read();
}
我再次改变
ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
ocommand.Parameters["Com_Id"].Value = Comid;
ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
ocommand.Parameters["userid"].Value = userID;`
现在它无效。我应该按照顺序设置参数值
答案 0 :(得分:1)
我注意到您需要考虑的以下部分:
您的select语句也不包含要检索的任何字段 尝试:
SELECT * FROM IBK_CO_USERS where .....
或指定您要提取的确切字段
db.Open()
(您只需检查它是否已打开)通常,获取sqlreader结果的常用方法是使用 片段:
odatareader = ocommand.ExecuteReader();
while (odatareader.Read())
{
/// Fetch your data
}
一般情况下,只要你设置一个参数名称和值并将这两个配对在一起,就不会发挥任何作用,例如:
ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
ocommand.Parameters["Com_Id"].Value = Comid;
ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
ocommand.Parameters["userid"].Value = userID;
相当于:
ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
ocommand.Parameters["userid"].Value = userID;
ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
ocommand.Parameters["Com_Id"].Value = Comid;
获得不同结果的唯一方法是更改名称 - 值配对,例如:
ocommand.Parameters.Add("userid", OracleDbType.Varchar2);
ocommand.Parameters["userid"].Value = Comid;
ocommand.Parameters.Add("Com_Id", OracleDbType.Varchar2);
ocommand.Parameters["Com_Id"].Value = userID;
结果与前两个例子不同
但是在Oracle ODP.Net documentation
中,默认情况下参数是由postition绑定的。如果要将其设置为受名称集绑定:
ocommand.BindByName = true;