我正在执行此代码:
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。
感谢。
答案 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;
}