Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从MS SQL Server 2005中选择一个数据_C#_.net_Sql Server_Sql Server 2005_Ado.net - Fatal编程技术网

C# 从MS SQL Server 2005中选择一个数据

C# 从MS SQL Server 2005中选择一个数据,c#,.net,sql-server,sql-server-2005,ado.net,C#,.net,Sql Server,Sql Server 2005,Ado.net,我在Microsoft SQL Server 2005数据库中有一个名为t_Student的表。在该表中有三列,分别命名为student\u regiNo,student\u Name,student\u Email 我使用下面的代码段来检索“学生名”。但不是显示“学生名”,而是显示“System.Data.SqlClient.SqlDataReader”。有什么问题吗 private void GetDatabaseConnection() { string connectionStr

我在Microsoft SQL Server 2005数据库中有一个名为
t_Student
的表。在该表中有三列,分别命名为
student\u regiNo
student\u Name
student\u Email

我使用下面的代码段来检索“学生名”。但不是显示“学生名”,而是显示“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;
}

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

while (reader.Read())
{
    string name = reader.GetString(0);
    Console.WriteLine("Read name: {0}", name);
}
进一步注意,您应该使用参数化查询,而不是将ID直接包含到SQL中,否则您将面临SQL注入攻击。有关更多信息,请参阅文档

最后,应该为
SqlConnection
SqlCommand
SqlDataReader
使用
using
语句,以便适当地处理它们。否则您将泄漏数据库连接。

使用

if (reader.Read())
{
     string selectedStudentName = reader.GetString(0);
}
只要您必须返回“查询返回的结果集中第一行的第一列”(from)

还可以使用参数化查询:

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

谢谢乔恩·斯基特。我的问题解决了。我可以再打扰你吗?我的代码出了什么问题,为什么它现在能工作?在您的代码中,您没有执行Jon在回答中提出的Read()方法。@towhidulbashar:您也没有向读者询问特定的列值-您只是调用了
reader.ToString()而已
-和
SqlDataReader
不会覆盖
ToString
。感谢Pavel Morshenyuk的有效回答。感谢abatishchev的宝贵建议。@towhidulbashar:不客气:)别忘了接受正确的答案。在这里和你的其他问题中,用一句简短的话会更好:例如,初始代码到底发生了什么,这是怎么做的…感谢第一个代码将整个读取器数组转换为字符串,你应该通过索引或其他方式从数组中获取“student\u Name”值,例如reader[“student\u Name”]和读取器[0]在索引0处返回相同的结果
var command = new connection.CreateCommand()
command.CommandText = "SELECT student_Name FROM t_Student WHERE student_regiNo = @number";
command.Parameters.AddWithValue(@number, selectedStudentRegiNo);
SqlCommand command = new SqlCommand(selectedStudentQuery, connection);
SqlDataReader reader = command.ExecuteReader();

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