ExecuteReader只给我一个结果

时间:2016-08-02 11:19:09

标签: c#

我正在执行此代码:

private string _ejecutarSentencia(string query, SqlConnection cnn)
    {
        string resultado = string.Empty;
        Logica logica = new Logica();
        try
        {
            using (SqlCommand command = new SqlCommand(query, cnn))
            {
                command.CommandType = CommandType.Text;
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        try
                        {
                            resultado += reader.GetValue(0).ToString().Trim() + "\n";
                        }
                        catch
                        { }
                    }
                }
            }
        }
        catch { }
        return resultado;
    }

但它只返回一个值(在此示例中为" 01 \ n")并且在sql management studio上执行的同一连接上的相同查询返回给我:

代码

01

02

03

04

我希望函数返回所有这样的行:

" 01 \ N02 \ N03 \ N04 \ n"

在VS 2012中使用.Net Framework 2.0和Windows Forms。

感谢。

5 个答案:

答案 0 :(得分:1)

你正在增加每个readed记录。 在您的代码中,我打算按位置访问字段。 我认为你不需要我变量。 尝试这样来检索第一列:

resultado += reader.GetValue(0).ToString().Trim() + "\n";

另外:避免使用空捕获。如果您不知道如何处理异常,请让它流动。

答案 1 :(得分:1)

在阅读光标时,您似乎不希望i变量:

// Do not use String when concatinating many chunks, but StringBuilder
StringBuilder resultado = new StringBuilder();

...

using (SqlDataReader reader = command.ExecuteReader()) {
  while (reader.Read())
    resultado.AppendLine(reader.GetValue(0).ToString().Trim());
}

...

return resultado.ToString(); 

答案 2 :(得分:0)

此代码错误:

int i = 0;
while (reader.Read())
{
     try
     {
           resultado += reader.GetValue(i).ToString().Trim() + "\n";
     }
     catch
     { }
     i++;
 }

您为结果集中的每一行增加i值,但这意味着对于第二行,您尝试访问“column”中的值.2。给定结果集,这将失败。

另外,这是非常错误的一点,你的代码中有一个空的catch,这将隐藏所有这些。只捕获异常的空捕获几乎总是一个坏主意,并可能导致可怜的傻瓜不得不维持在未来追捕你。

答案 3 :(得分:0)

  

如果你的歌曲包含这样的数据

 Sl   Col1    Col2     Col3

 1    KB    Keyboard    20.00

 2    JS    JOYstick    20.00

您的代码通过抛出错误

获得1\nKB\nKeyboard\n20.00停止

答案 4 :(得分:0)

你在评论中提到while循环只处理一次,删除try catch块,这些块应允许在IDE中弹出异常

private string _ejecutarSentencia(string query, SqlConnection cnn)
    {
        string resultado = string.Empty;
        Logica logica = new Logica();
            using (SqlCommand command = new SqlCommand(query, cnn))
            {
                command.CommandType = CommandType.Text;
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                            resultado += reader["Code"].ToString().Trim() + "\n";
                    }
                }
            }
        }
        return resultado;
    }