2017-03-20 82 views
1

这工作正常,如果我硬编码用户名。不会使用参数,我尝试了很多不同的方式。我错过了什么?当我使用参数时,表格总是以零计数结束。参数不工作的SQL查询 - ASP.NET与Oracle数据库

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 
+0

'ParameterName'是否需要加前缀':'? – DavidG

+0

@DavidG我刚刚尝试过,结果没有任何区别。令人费解的。 –

+0

@DavidG只在查询中。 https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparameter.parametername(v=vs.110).aspx#Anchor_2 – Nkosi

回答

0

对于用于字符串Oracle参数类型,OracleDbType.Varchar2以及OracleDbType.NVarchar2,你需要指定一个尺寸:

uname.Size = 50; 

如果实际值应该对应于长列的人物根据架构(在你的情况下为USER_LOGINNAME)。

+0

大小和正确的类型(在这种情况下的字符)是答案。非常非常感谢你! –