C # SqlDataReader = null? - PullRequest
       35

C # SqlDataReader = null?

3 голосов
/ 23 марта 2010
            String sqlCheckPass = 
"Select * from Login where Username like @Username and Password like @Password";
        SqlCommand SqlCom = new SqlCommand(sqlCheckPass, myConnection);
        SqlCom.Parameters.Add(new SqlParameter("@Username", sUserName));
        SqlCom.Parameters.Add(new SqlParameter("@Password", sPassword));

        myConnection.Open();
        SqlDataReader myreader;
        myreader = SqlCom.ExecuteReader();
        int id = -1;

ErrorBox.InnerHtml = "Username:" + sUserName + ":" + sPassword + ":<br/>";
while (myreader.HasRows)
{
    id = (int)myreader["id"];
    String sUser = (String)myreader["Username"];
    String sPass = (String)myreader["Password"];
    ErrorBox.InnerHtml += "UserId is <b>" + id + "</b> " + sUser + ":" + sPass + ":<br >";
    Session["LoginID"] = id;
    Server.Transfer(ReturnPage);

}
if (id == -1)
{
    ErrorBox.InnerHtml = "Incorrect Password";
}
myConnection.Close();
catch (Exception err)
{
    ErrorBox.InnerHtml = "Error Getting  Option ID" + err.Message;
}

Я добавил точку останова в myreader = SqlCom.ExecuteReader (); и он продолжает возвращать myreader как null и HasRows = False, но у него есть строки. Таким образом, он продолжает проверять мой логин как неправильный, так как id = -1,

Помощь

Ответы [ 3 ]

4 голосов
/ 23 марта 2010

Вы не подключили свой ридер к вашему SQL-соединению / команде?

SqlConnection myConnection = new SqlConnection(myConnectionString);
SqlCommand myCommand = new SqlCommand(mySelectQuery, myConnection);
myConnection.Open();
SqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
while(myReader.Read()) 
{
   Console.WriteLine(myReader.GetString(0));
}
myReader.Close();
1 голос
/ 23 марта 2010

Ответ Брайана Денни выше верен, однако я вложу весь код внутри, используя операторы, как показано ниже:

using (SqlConnection dataConnection = new SqlConnection(connectionString))
{
    using (SqlCommand SqlCom = dataConnection.CreateCommand())
    {
        SqlCom.CommandText = "Select * from Login where Username like @Username and Password like @Password";
        SqlCom.Parameters.Add(new SqlParameter("@Username", sUserName)); 
        SqlCom.Parameters.Add(new SqlParameter("@Password", sPassword)); 

        dataConnection.Open();
        SqlDataReader myreader; 
        myreader = SqlCom.ExecuteReader(); 
        dataConnection.Close();
    }
}

Я не добавил весь ваш код в этот фрагмент, я подумал, что вы поняли идею.

Кроме того, вы можете попробовать изменить оператор select, чтобы он возвращал количество записей, поскольку это все, что вам нужно в любом случае, число:

SELECT COUNT(*) FROM Login WHERE Username like @Username AND Password like @Password

Удачи!

1 голос
/ 23 марта 2010

Возможно, проблема в LIKE в вашем запросе с SqlParameters Попробуйте

String sqlCheckPass =  
"Select * from Login where Username like '%' + @Username + '%' and Password like '%' + @Password + '%'"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...