2017-03-20 1 views
1

ユーザー名をハードコードすると問題なく動作します。パラメータでは動作しません。さまざまな方法で試しました。私は何が欠けていますか?パラメータを使用すると、テーブルは常にゼロカウントで終了します。パラメータが有効でないSQLクエリ - Oracle DBを使用する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.oracleparametername(v=vs.110).aspx#Anchor_2 – Nkosi

答えて

0

OracleDbType.Varchar2などOracleDbType.NVarchar2、あなたのサイズを指定する必要があります。

実際の値は、列の文字の長さに対応している必要があり
uname.Size = 50; 

スキーマ(あなたの場合はUSER_LOGINNAME)によると。

+0

サイズと正しいタイプ(この場合はChar)が答えです。本当にありがとう! –

関連する問題