C# 为什么编译错误“使用未分配的局部变量”?

C# 为什么编译错误“使用未分配的局部变量”?,c#,oledbcommand,C#,Oledbcommand,我不断地得到这个错误,但我不知道为什么,我在这里得到它: Label1.Text=fgmail.ToString; 下面是完整的代码: string st = this.pfun.Text; string sqlstr2 = "select * from hsinfo WHERE rname='" + st + "'"; OleDbCommand cmd = new OleDbCommand(sqlstr2, DBFunction.GenerateConnection("DBS.accdb"))

我不断地得到这个错误,但我不知道为什么,我在这里得到它: Label1.Text=fgmail.ToString; 下面是完整的代码:

string st = this.pfun.Text;
string sqlstr2 = "select * from hsinfo WHERE rname='" + st + "'";
OleDbCommand cmd = new OleDbCommand(sqlstr2, DBFunction.GenerateConnection("DBS.accdb"));
OleDbDataReader reader = cmd.ExecuteReader();
string fgmail;

while (reader.Read())
{
    fgmail = reader[1].ToString();
}

Label1.Text = fgmail.ToString();

如果读卡器没有行,变量将永远不会被分配。

您正在读取的表可能没有任何记录,如果表中没有值,循环将不会为您的变量分配任何内容。

您有SQL注入漏洞。最后一个漏洞是什么意思?读取器[1]是指最后一个吗?您正在进行选择,然后读取所有结果。为每个结果将fgmail设置为reader[1],这意味着完成后,fgmail将从最后一行获取其值。那么在这种情况下,如果您只需要一个值,为什么还要循环所有这些值呢?您的查询也没有ORDER BY,因此如果有多个结果,则无法确定您将得到哪个结果。如果您只希望有一个结果,可能会修改查询以选择一列not select*,并使用ExecuteScalar而不是读卡器。如果您希望查询中有零条或一条记录,最好使用If reader.Read而不是while reader.Read。检查读卡器[1]在赋值给字符串变量之前,变量是否有值。IsNullOrEmptyreader[1].ToString;你能简化一下吗?逻辑上有几个问题。请看@Scott Hannen的评论。您可以通过string fgmail=string.Empty初始化字符串。这会将您的字符串初始化为空字符串