Рейтинг:
2
Rajat-Indiandotnet
Извините, я не понял, что ваш SQL-оператор не имеет столбца Name
SELECT Count(*) FROM NewsClip_Login
У вас должно быть columnname, если вы используете reader, например, если вы извлекаете значение name, то у вас должен быть столбец name в вашем операторе select.
Удалите @ из читателя, это должно быть reader ["Name"]
Primo Chalice
Ошибка все еще существует.
Система.IndexOutOfRangeException: 'Name'
Рейтинг:
0
Wendelius
У вас нет параметра под названием @name
в вашем SQL-операторе. Возможно, вы хотели выбрать его как
SELECT Name FROM NewsClip_Login WHERE Username = @Username AND Password = @Password";
Если это то, что вы пытаетесь сделать, то вы ссылаетесь на столбцы результатов wiuthout@, так как они используются для параметров.
Еще одна вещь, касающаяся пароля. Никогда не храните пароли в виде обычного текста. Они всегда должны быть хешированы в одну сторону. Взгляните на это
Хранение паролей: как это сделать.[
^]
ДОПОЛНЕНИЕ
-----------
string queryText = @"SELECT Name FROM NewsClip_Login WHERE Username = @Username AND Password = @Password";
using (SqlConnection cn = new SqlConnection("Data Source=PRIMO-CHALICE;Initial Catalog=NewsClip;Integrated Security=True")) {
using (SqlCommand cmd = new SqlCommand(queryText, cn))
{
cn.Open();
cmd.Parameters.AddWithValue("@Username", UsernameTextBox.Text);
cmd.Parameters.AddWithValue("@Password", PasswordTextBox.Text);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
NameLabel.Text = reader["Name"].ToString();
NameLabelText = NameLabel.Text;
reader.Close();
...
Primo Chalice
Ошибка все еще существует.
Wendelius
Вы также удалили код, чтобы добавить параметр в свою команду. Взгляните на измененный ответ.
Primo Chalice
Я попробовал модифицированный код, и я думаю, что он работал, но пришел с новой ошибкой.
"Система.InvalidCastException: 'указанное приведение недопустимо.'" on "int result = (int)cmd.Executescalar так();"
Wendelius
ExecuteScalar возвращает данные из первого столбца первой строки результирующего набора. Теперь, когда мы изменили COUNT(*)
к Name
он больше не возвращает int.
Если вам все еще нужен счетчик, вам нужно сделать отдельный запрос для этого. Однако, если подсчет действительно необходим, может ли быть несколько пользователей с одинаковым именем и паролем? В конце концов, когда вы получаете с помощью считывателя, вы уже знаете, существует ли пользователь или нет.
Primo Chalice
Итак, теперь в состоянии (если), что я должен написать, чтобы проверить, существует ли пользователь или нет?
Primo Chalice
Я только что попробовал использовать данные, присутствующие в SQL, и это работает. Ошибка отображается, когда данные отсутствуют.
Система.InvalidOperationException: "недопустимая попытка чтения при отсутствии данных".