...
...
...
try
{
string Tags_collect;
SqlDataReader Data1 = cmd.ExecuteReader();
Data1.Read();
lbl_q_title.Text = Data1["subject"].ToString();
Data1.NextResult();
while (Data1.Read())
{
Tags_collect = Data1.GetString(0);
Tags_collect= Tags_collect+ Tags_collect;
}
lbl_tags.Text = Tags_collect;
.....
....
....
不确定我为什么会收到此错误 我错过了什么?
答案 0 :(得分:7)
第一次分配给Tags_collect
是在while (Data1.Read())
循环内部,不能保证永远执行。
通过在声明变量时初始化变量来解决此问题:
string Tags_collect = string.Empty;
更好的是,使用StringBuilder
而不是依赖重复的连接:
StringBuilder tags = new StringBuilder();
// ...
while (Data1.Read())
{
string tag = Data1.GetString(0);
sb.Append(tag);
sb.Append(","); // Separator
}
lbl_tags.Text = tags.ToString();
在循环中将字符串连接到自身是非常低效的,因为字符串是不可变的,因此每个连接都会创建一个全新的实例。使用StringBuilder
可以通过使用单个缓冲区来防止这种情况。
答案 1 :(得分:2)
因为如果Data1.Read()
在开始时返回false,则Tags_collect
未分配。
答案 2 :(得分:1)
编译器必须考虑while循环条件中的Data1.Read()
永远不会返回true的可能性。如果发生这种情况,那么Tags_collect永远不会被初始化,因此就是错误。
答案 3 :(得分:1)
你需要像这个小样本一样设置你的阅读器:
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
答案 4 :(得分:1)
试试这个:
string Tags_collect=string.empty;