1

我有这个代码片段:

变量 m 是一个字符串,设置为第一个 sql 命令返回的 Name,即关闭,然后第二个用于返回其他详细信息。此时 m 用于填充视图,但 Visual Studio 说它是一个未分配的变量。我该如何解决?

SqlCommand mcom = new SqlCommand("SELECT * FROM [Rica].[dbo].[MaritialStatus] WHERE ID=" + myReader["MaritalStatusID"], mnner);

SqlDataReader mread = null;
mread = mcom.ExecuteReader();

while (mread.Read())
{
    m = mread["Name"].ToString();
}
mnner.Close();

user_table.Text = user_table.Text + "<tr><td>"+ myReader["PostCode"] +"</td>";

//user details
SqlConnection inner = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RicaConnectionString"].ConnectionString);
inner.Open();

SqlCommand icom = new SqlCommand("SELECT * FROM [Rica].[dbo].[User] WHERE ID=" + myReader["ID"], inner);

SqlDataReader iread = null;
iread = icom.ExecuteReader();

while (iread.Read())
{
    user_table.Text = user_table.Text + "<td>" + iread["NamePrefix"] + " " + iread["FirstName"] + " " + iread["LastName"] + "</td><td>" + iread["Username"] + "</td><td>" + g + "</td><td>" + m + "</td></tr>";
}

iread.Close();
4

2 回答 2

3

未分配的编译器是完全正确m的。例如,可能没有返回行。只需设置要用于无行情况的初始值,例如:

string m = null;

更具体地说,对于 a while/ foreachetc 中的赋值, / 之后的while“确定赋值”与之前foreach的“确定赋值”相同,因为可能没有执行迭代(即 a在空集上,或者测试立即返回)。foreachwhilefalse

我还必须观察到您当前的代码中存在很多问题;很多缺失using,SQL 注入漏洞(这些都是潜在的大问题),等等,xss 漏洞(这也是一个大问题)。

使用像 dapper-dot-net 这样的工具可以修复 SQL 注入,允许非常简单的参数化和读取,并处理命令/读取器的正确处理。xss 问题应该通过正确的 html 编码来解决。尽管事实上,很少有 SQL 代码和 HTML 代码像这样彼此相邻。

于 2012-07-26T08:10:13.747 回答
2

局部变量最初是未分配的,因此您需要在使用之前分配/初始化它们

string m=string.Empty;
于 2012-07-26T08:09:06.970 回答