【发布时间】:2017-08-12 07:41:11
【问题描述】:
如果我对用户名进行硬编码,这可以正常工作。不适用于参数,我尝试了很多不同的方法。我错过了什么?当我使用参数时,表格总是以零计数结束。
protected void LogIn(object sender, EventArgs e)
{
OracleConnection con = TTTrackerConnection.DevDBConnection();
String myUserName = UserName.Text;
DataSet user_ds = new DataSet();
String myPW = Password.Text;
using (con)
{
con.Open();
String sql = "SELECT USER_PW FROM TT_USER WHERE USER_LOGINNAME = :username";
OracleCommand cmdFindUser = new OracleCommand(sql, con);
OracleParameter uname = cmdFindUser.CreateParameter();
uname.ParameterName = "username";
uname.OracleDbType = OracleDbType.Varchar2;
uname.Value = UserName.Text;
cmdFindUser.Parameters.Add(uname);
OracleDataAdapter oda = new OracleDataAdapter(cmdFindUser);
oda.Fill(user_ds);
con.Close();
}
if (user_ds.Tables[0].Rows.Count != 0)
{
String userPW = user_ds.Tables[0].Rows[0].Field<string>("USER_PW");
if (myPW == userPW)
{
lblPasswordResult.Text = "Password Matched";
}
else
{
lblPasswordResult.Text = "Password does not Match";
}
}
else
{
lblPasswordResult.Text = "Login not found";
}
}//end Login button click method
【问题讨论】:
-
ParameterName是否需要以:为前缀? -
@DavidG 我刚试过,结果没有区别。令人困惑。
-
@DavidG 仅在查询中。 msdn.microsoft.com/en-us/library/…
-
@LeeAmes 语法示例代码看起来正确。参数的值会不会产生任何结果?一个流浪的角色?在将输入分配给参数之前验证输入。
-
只是查找了一些已知良好的代码,我们在其中做同样的事情。我发现的唯一区别是额外的
uname.Direction = ParameterDirection.Input;,但这是默认设置,不应该有任何区别。我们总是使用冒号:在名称之前,也在ParameterName中。可能是类型不匹配 -OracleDbType.NVarchar2?