带有参数的SQL查询不起作用 - 带有Oracle DB的ASP.NET

时间:2017-03-20 20:42:45

标签: c# sql asp.net oracle11g

如果我硬编码用户名,这可以正常工作。不会使用参数,我尝试了很多不同的方法。我错过了什么?当我使用参数时,表总是以零计数结束。

    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

1 个答案:

答案 0 :(得分:0)

对于用于字符串的Oracle参数类型OracleDbType.Varchar2以及OracleDbType.NVarchar2,您需要指定大小:

uname.Size = 50;

其中实际值应与根据架构的列的字符长度相对应(在您的情况下为USER_LOGINNAME)。