2015-04-20 9 views
0

Я хочу получить поле «Model» и положить на Textbox6. Но почему это не работает. Проблема заключается в том, что Model поле ответа не будет отображаться в textbox6Как получить поля из базы данных

string Query = "Select * from S where Name = '" + TextBox1.Text + "' and Clientno = '" + TextBox2.Text + "';"; 
command.CommandText = Query; 
OleDbDataReader reader = command.ExecuteReader(); 

while (reader.Read()) 
{ 
    string Model = reader.GetString(reader.GetOrdinal("Model")); 
    TextBox6.Text = Model; 
} 
+0

Удалить; from select query –

+0

И передать соединение в командной строке. –

+5

Какая ошибка? – Mairaj

ответ

4

пару вещей:

  • Не используйте select *, вместо этого использовать selectстолбцы имена
  • Do не передайте .Text прямо к вашему запросу, вместо этого используйте parameterized sql выражение
  • Если Clientno является столбец первичного ключа или комбинацией Name и ClientNo дают уникальный результат, используйте ExecuteScalar, вы не должны использовать ExecuteReader и петлю через datareader

Поскольку вы используете только одно поле и хотят, чтобы заполнить в текстовом поле , изменить ваш select заявление:

select top 1 Model from S where.... 

И если вы читаете только одну строку, вы не будете нуждаться в то время цикла. Кроме того, вы всегда должны закрывать читателя и вставлять свой SqlConnection внутри, используя блок. (подлежит редактированию в соответствии с предложениями)

If (reader.Read()) 
{ 
    TextBox6.Text = reader.GetString(reader.GetOrdinal("Model")); 
reader.Close(); 
} 
+0

, но у меня есть больше полей, необходимых для отображения в текстовом поле1-6. –

+1

Вы имеете в виду, что у вас есть 6 текстовых полей? Затем вам нужно «выбрать Col1..Col6» и назначить его для каждого текстового поля. – ANewGuyInTown

+0

Скорее используйте 'if (reader.Read()) ...', чем while/break. Также не забудьте закрыть читателя после использования. –

Смежные вопросы