c # sqldatareader нет данных - PullRequest
       8

c # sqldatareader нет данных

0 голосов
/ 08 октября 2018

У меня небольшая проблема здесь.Я пытаюсь использовать SqlDataReader для чтения данных из моей базы данных.Код выглядит следующим образом:

        internal static User GetUser(string login)
    {
        SqlConnection conn = new SqlConnection(DataBaseUtility.ConnectionString);

        conn.Open();

        string sql = "SELECT * FROM BookMenagerDB.dbo.users";
        //where UserLogin like @login
        try
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.AddWithValue("@login", login);
            User user = new User();
            SqlDataReader sqlDataReader = cmd.ExecuteReader();
            user.Id = (int)sqlDataReader["UserId"];
            user.Login = sqlDataReader["UserLogin"].ToString();
            user.PasswordHash = sqlDataReader["UserPassword"].ToString();
            user.Salt = (byte[])sqlDataReader["UserPasswordSalt"];
            return user;
        }

        catch (SqlException ex)
        {
            MessageBox.Show("GetUser fail");
        }
        conn.Close();
        return new User();
    }

Я пытаюсь выполнить запрос sql и получаю данные, но строка "user.Id = (int) sqlDataReader [" UserId "];"покажи мне нет данных в sqlDataReader.Я понятия не имею, в чем проблема.

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вам нужно вызвать функцию Read() на вашем SqlDataReader, чтобы перевести считыватель к первой или следующей записи из базы данных.Также вы должны использовать утилизацию для освобождения соединения и ресурсов.

public User GetUser(string login)
{
    User user = new User();
    const string sql = "SELECT * FROM BookMenagerDB.dbo.users";
    using (SqlConnection connection = new SqlConnection(DataBaseUtility.ConnectionString))
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        connection.Open();
        command.Parameters.AddWithValue("@login", login);
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.Read())
            {
                user.Id = (int)reader["UserId"];
                user.Login = reader["UserLogin"].ToString();
                user.PasswordHash = reader["UserPassword"].ToString();
                user.Salt = (byte[])reader["UserPasswordSalt"];
            }
        }
    }
    return user;
}
0 голосов
/ 08 октября 2018

После ExecuteReader() вы должны Read() получить записи:

   User user = new User();
   SqlDataReader sqlDataReader = cmd.ExecuteReader();
   if(sqlDataReader.Read())
   {
       user.Id = (int)sqlDataReader["UserId"];
       user.Login = sqlDataReader["UserLogin"].ToString();
       user.PasswordHash = sqlDataReader["UserPassword"].ToString();
       user.Salt = (byte[])sqlDataReader["UserPasswordSalt"];
    }
...