从MS SQL Server 2005中选择数据
我在Microsoft SQL Server 2005数据库中有一个名为t_Student
的表。在该表中有三列,分别为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;
}
使用
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);
ExecuteReader
返回SqlDataReader
。您需要使用SqlDataReader
API来从中读取数据。不要忘记查询可以返回多行,每行有多列。例如:
while (reader.Read())
{
string name = reader.GetString(0);
Console.WriteLine("Read name: {0}", name);
}
,你应该使用参数化查询,而不是直接包括标识加入SQL进一步说明 - 否则你会把自己暴露给SQL注入攻击。有关更多信息,请参阅SqlCommand.Parameters
的文档。
最后,您应该为SqlConnection
,SqlCommand
和SqlDataReader
使用using
语句,以便您适当处置它们。否则,你将泄漏数据库连接。
if (reader.Read())
{
string selectedStudentName = reader.GetString(0);
}
感谢Pavel Morshenyuk为您的有效答案。 – Towhid 2010-08-16 08:00:43
SqlCommand command = new SqlCommand(selectedStudentQuery, connection);
SqlDataReader reader = command.ExecuteReader();
if(reader.Read())
{
return reader["student_Name"];
}
return "not exist";
会更好用一个简短的句子:什么是最初的代码为例,真的发生了什么这是做这个... – JYL 2012-09-26 13:09:25
感谢第一个代码是整个阅读器阵列转换为一个字符串,你应该通过索引或其他e,g reader [“student_Name”]和reader [0]在索引零处返回相同的结果来获得数组中的“student_Name”值 – 2012-09-26 13:55:16
感谢abatishchev为您宝贵的建议。 – Towhid 2010-08-16 08:01:35
@towhidulbashar:不客气:)不要忘记接受正确的答案。在这里,在你的其他队列 – abatishchev 2010-08-16 08:07:36