Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# SqlDataReader只返回第一行值为什么?_C#_Asp.net - Fatal编程技术网

C# SqlDataReader只返回第一行值为什么?

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

我需要返回列Test中的所有值,但不知何故只返回第一行值

我试图添加dr2.NextResult;但它没有帮助

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块。