49R Ответов: 2

В C# как получить доступ к данным базы данных в combobox


Я создал страницу входа,содержащую имя пользователя и пароль,используя базу данных sql server, и я создал sting, который хранит имя пользователя, а затем в следующем, следующем, следующем приложении windows(.NET), используя строку, которая является именем пользователя .Я хотел получить доступ к данным в этой строке, а не пароль, все остальные данные должны отображаться в поле со списком.Ниже приведен код, в котором наверняка есть ошибка, потому что я не знаю об этом в совершенстве.

st=имя пользователя

i=1-30 , потому что мой столбец называется от 1 до 30

пожалуйста, пришлите мне подсказку или код, или идею, или...

Что я уже пробовал:

int i;
строка[] s;
частный недействительными label1_Click(объект отправителя, EventArgs в электронной)
{
ст = метка1.Текст;

Объект sqlconnection кон = новое sqlconnection(@"источник данных=(на localdb)\MSSQLLocalDB;ключевое слово attachdbfilename=С:\Пользователи\\psais документы\sghsdatabase.МДФ;Комплексная безопасность=true;в подключения таймаут=30");

строка q = st;

SqlCommand cmd = новая команда SqlCommand(q,con);

SqlDataReader r;

пробовать
{
против.Открыть();
r = cmd.Метода executereader();
в то время как (r.Read()) {
для (i = 1; i <= 30; i++)
{
s[i] = r.GetString(i);
}
для (i = 1; i <= 30; i++)
{
поле combobox1.Предметы.Добавить("ы[я]");
}

}
}

0x01AA

Взгляните сюда, может быть, это даст вам представление: winforms - C# заполнение выпадающего списка из таблицы в базе данных - переполнение стека[^]

2 Ответов

Рейтинг:
8

Mike V Baker

Я бы повторил комментарии Ричарда. Никогда когда-либо когда-либо название столбцов от 1 до 30. Имена полей ваших таблиц должны иметь осмысленные имена, иначе вы потратите много времени на проверку базы данных, пытаясь вспомнить, что вы поместили в столбец 17. Я бы сказал то же самое о контроле над формами. А чем поле combobox1 вы хотите, чтобы параметр cbuserdata

Что касается вашего конкретного вопроса, то проблема в том, что вы не сказали команде, что ищете. Следуйте за этим

st=username
string q = st
SqlCommand cmd = new SqlCommand(q,con) // at this point q == username

Итак, вы говорите, что SqlCommand(username, con) если они вводят johndoe в качестве имени пользователя, то SqlCommand('johndoe', con) недостаточно, чтобы понять, чего вы хотите. 'q' должен быть SQL-оператором типа "SELECT * FROM User WHERE UserName =" + username

У меня также есть вопрос о пользовательском опыте здесь. Вы хотите найти одну запись в базе данных, а затем отобразить в поле со списком все остальные данные, которые у вас есть на этого пользователя, такие как PersonId, FirstName, MiddleName, LastName, DOB, HairColor и т. д.?

Еще пара комментариев, и вы можете выполнить обе операции в одном цикле for next. Получение значения в s[i] не мешает помещению значения из s[i] в поле со списком, поэтому вы можете просто поместить их в один и тот же цикл. И вы на самом деле добавляете строку "s[i]" в поле со списком 30 раз, а не фактическое значение.
for (i=1; i <= 30; i++)
{
    s[i] = r.GetString(i);
    cbUserData.Items.Add(s[i]);
}

Еще одна вещь.. извини, я не пытаюсь быть злым. Окружите свой код тегами < pre > / pre > (без пробелов, мне пришлось добавить их, чтобы сделать его видимым) Таким образом, он сохранит синтаксис и отступы.

ХТХ,
Майк


Рейтинг:
1

Richard MacCutchan

Цитата:
это точно ошибка

If that is your code then there are a lot of mistakes, but the main one is that the code makes no sense, because you do not have a SQL command for the reader. If you are trying to replicate a login system then you need a simple database with a table to hold the user information. Create a table with meaningful names so you know what each column represents. As a start you will need the userid and the password, plus any other details the user is to input. When a user tries to access the system you do a lookup of the database to see if they are registered. If not, go to the registration pages. If they are registered then you just need to check the password - and do not save passwords in clear (or even encrypted) text.