2010-08-16 144 views
0

我在Microsoft SQL Server 2005数据库中有一个名为t_Student的表。在该表中有三列,分别为student_regiNostudent_Namestudent_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

感谢abatishchev为您宝贵的建议。 – Towhid 2010-08-16 08:01:35

+2

@towhidulbashar:不客气:)不要忘记接受正确的答案。在这里,在你的其他队列 – abatishchev 2010-08-16 08:07:36

3

ExecuteReader返回SqlDataReader。您需要使用SqlDataReader API来从中读取数据。不要忘记查询可以返回多行,每行有多列。例如:

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

,你应该使用参数化查询,而不是直接包括标识加入SQL进一步说明 - 否则你会把自己暴露给SQL注入攻击。有关更多信息,请参阅SqlCommand.Parameters的文档。

最后,您应该为SqlConnectionSqlCommandSqlDataReader使用using语句,以便您适当处置它们。否则,你将泄漏数据库连接。

+0

谢谢Jon Skeet。我的问题解决了。 我可以再打扰你吗?我的代码有什么问题,为什么它现在在工作? – Towhid 2010-08-16 07:36:47

+1

在你的代码中,你没有执行Jon在他的答案中提供的Read()方法。 – 2010-08-16 07:43:58

+0

感谢Ardman的快速反馈。 – Towhid 2010-08-16 07:46:56

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

感谢Pavel Morshenyuk为您的有效答案。 – Towhid 2010-08-16 08:00:43

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

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

会更好用一个简短的句子:什么是最初的代码为例,真的发生了什么这是做这个... – JYL 2012-09-26 13:09:25

+0

感谢第一个代码是整个阅读器阵列转换为一个字符串,你应该通过索引或其他e,g reader [“student_Name”]和reader [0]在索引零处返回相同的结果来获得数组中的“student_Name”值 – 2012-09-26 13:55:16

相关问题