C# 从MS SQL Server 2005中选择一个数据
我在Microsoft 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
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";