C# SqlDataReader只返回第一行值为什么?
我需要返回列Test中的所有值,但不知何故只返回第一行值 我试图添加dr2.NextResult;但它没有帮助C# SqlDataReader只返回第一行值为什么?,c#,asp.net,C#,Asp.net,我需要返回列Test中的所有值,但不知何故只返回第一行值 我试图添加dr2.NextResult;但它没有帮助 SqlCommand command = conn.CreateCommand(); command.CommandText = "select Test from PrescTest "; conn.Open(); command.ExecuteNonQuery(); SqlDataReader dr2 = command.ExecuteReader(); try { w
SqlCommand command = conn.CreateCommand();
command.CommandText = "select Test from PrescTest ";
conn.Open();
command.ExecuteNonQuery();
SqlDataReader dr2 = command.ExecuteReader();
try
{
while (dr2.Read())
{
// get the results of column "Test"
string Tests = (string)dr2["Test"].ToString();
TextBox15.Text = Tests +" ";
}
conn.Close();
}
catch (SqlException sqlexception)
{
Response.Write("ERROR ::" + sqlexception.Message);
}
catch (Exception ex)
{
Response.Write("ERROR ::" + ex.Message);
}
finally
{
conn.Close();
}
将为您指定该值并删除文本框的上一个值。试试这个:
while (dr2.Read())
{
// get the results of column "Test"
string Tests = dr2["Test"].ToString();
TextBox15.Text += Tests +" ";
}
您正在覆盖来自数据库的值。见下面修订的代码
SqlCommand command = conn.CreateCommand();
command.CommandText = "select Test from PrescTest ";
conn.Open();
//Nothing to execute so you can scrape this line
//command.ExecuteNonQuery();
SqlDataReader dr2 = command.ExecuteReader();
try {
string Tests = "";
if (dr2.HasRows) {
while (dr2.Read()) {
// get the results of column "Test"
Tests += dr2["Test"].ToString() + " ";
}
}
TextBox15.Text = Tests.Trim();
conn.Close();
} catch (SqlException sqlexception) {
Response.Write("ERROR ::" + sqlexception.Message);
} catch (Exception ex) {
Response.Write("ERROR ::" + ex.Message);
} finally {
conn.Close();
}
我确信它会返回所有行。但您只将最后一个添加到TextBox15.Text。在while循环的每次迭代中,您都会创建新的测试字符串,因此最终只保留最后一个。顺便说一句:尝试对连接、命令和读取器使用一些using语句来正确地处理它们,而不是尝试手动执行,并且在所示代码中是错误的。@RenéVogt ann okayy你有一个观点。那么,如何将所有记录保存在TextBox15中呢?另外,ExecuteReader执行Select查询。ExecuteOnQuery毫无意义here@Steve你为什么要删除你的答案?我认为这很好,不过我还将详细介绍如何只在try块中编写查询,不需要关闭try块中的连接,使用using语句,不直接将UI代码绑定到数据访问代码。这应该是一种返回字符串集合的方法,应该更实用。很高兴我能提供帮助!根据评论中的一些建议,您应该真正考虑使用语句。它对sql CONN、数据读取器、命令等项执行自动关闭/处置,这是一种良好的做法。如果字符串太多,则继续重建Tests变量的方法可能会出现问题。字符串是不可变的,在每个循环中创建两个新字符串。最好使用StringBuilderSqlDataReader dr2=command.ExecuteReader之类的工具;这是一个危险的电话。查询可能错误,数据库可能不可用,表可能被锁定,等等,这些都属于try块。