2010-08-16 2 views
0

У меня есть таблица с именем t_Student в базе данных Microsoft SQL Server 2005. В этой таблице представлены три столбца: student_regiNo, student_Name, student_Email.Выберите данные из MS SQL Server 2005

Я использую следующий сегмент кода для извлечения «student_Name». Но вместо того, чтобы показывать «student_Name», он показывает «System.Data.SqlClient.SqlDataReader». В чем проблема?

private void GetDatabaseConnection() 
{ 
    string connectionString = @"server=RZS-F839AD139AA\SQLEXPRESS; Integrated Security = SSPI; database = StudentCourseInformation"; 
    connection = new SqlConnection(connectionString); 
    connection.Open(); 
} 

public string GateStudentName(string selectedStudentRegiNo) 
{ 
    GetDatabaseConnection(); 

    string selectedStudentQuery = @"SELECT student_Name FROM t_Student WHERE (
            student_regiNo = 
            '" +selectedStudentRegiNo+ @"' 
            )"; 
    SqlCommand command = new SqlCommand(selectedStudentQuery, connection); 
    SqlDataReader reader = command.ExecuteReader(); 

    string selectedStudentName = Convert.ToString(reader); 
    return selectedStudentName; 
} 

ответ

4

Использование

return (string)command.ExecuteScalar(); 

насколько вы должны вернуться «в первый столбец первой строки в наборе результатов, возвращенного запросом» (от MSDN)

использовать также параметризованная запрос:

var command = new connection.CreateCommand() 
command.CommandText = "SELECT student_Name FROM t_Student WHERE student_regiNo = @number"; 
command.Parameters.AddWithValue(@number, selectedStudentRegiNo); 
+0

Спасибо абатищев за ваше ценное предложение. – Towhid

+2

@towhidulbashar: Добро пожаловать :) Не забудьте принять правильный ответ. Здесь и в ваших других вопросах – abatishchev

3

ExecuteReader возвращает SqlDataReader. Вам необходимо использовать SqlDataReader API для чтения данных. Не забывайте, что запрос может возвращать несколько строк с несколькими столбцами в каждой строке. Например:

while (reader.Read()) 
{ 
    string name = reader.GetString(0); 
    Console.WriteLine("Read name: {0}", name); 
} 

Далее отметим, что вы должны использовать параметризованный запрос, а не включать идентификатор непосредственно в SQL - в противном случае вы оставляете себя открытым для атак путем внедрения SQL. Дополнительную информацию см. В документах для SqlCommand.Parameters.

Наконец, вы должны использовать using заявления для SqlConnection, SqlCommand и SqlDataReader, так что вы утилизировать надлежащим образом. В противном случае вы собираетесь протекать соединения с базой данных.

+0

Спасибо Jon Skeet. Моя проблема решена. Могу ли я снова вас беспокоить ... пожалуйста? Что случилось с моим кодом и почему он работает сейчас? – Towhid

+1

В вашем коде вы не выполняете метод Read(), который Джон поставил в ответ. –

+0

Спасибо Ардман за вашу быструю обратную связь. – Towhid

1
if (reader.Read()) 
{ 
    string selectedStudentName = reader.GetString(0); 
} 
+0

Спасибо, Павел Моршенюк за ваш эффективный ответ. – Towhid

0
SqlCommand command = new SqlCommand(selectedStudentQuery, connection); 
SqlDataReader reader = command.ExecuteReader(); 

if(reader.Read()) 
{ 
    return reader["student_Name"]; 
} 
return "not exist"; 
+1

Было бы лучше с коротким предложением: что на самом деле происходит с исходным кодом, например, что делает это ... – JYL

+0

Спасибо, что первый код был прикрытием всего массива читателей в строку, вы должно было получить значение «student_Name» из массива через индекс или иначе e, g reader ["student_Name"] и читатель [0] возвращают те же результаты при нулевом индексе –

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