我有这段代码:
变量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();
答案 0 :(得分:3)
编译器完全正确,m
未分配。例如,可能有没有返回行。只需设置要用于无行大小写的初始值,例如:
string m = null;
更具体地说,对于while
/ foreach
等中的作业,while
/ foreach
后的“明确作业”与“明确作业”相同“之前,因为可能没有执行迭代(即空集上的foreach
,或者测试立即返回while
的{{1}}。
我还必须注意到当前代码中存在很多的问题;大量缺少false
,SQL注入漏洞(这些都是潜在的大问题)等,xss漏洞(这也是一个巨大的问题)。
使用像dapper-dot-net这样的工具可以修复SQL注入,允许非常简单的参数化和读取,并处理命令/阅读器的正确处理。应该通过html编码正确解决xss问题。虽然事实上,很少有SQL代码和HTML代码紧挨着这些。
答案 1 :(得分:2)
本地变量最初未分配,因此您需要在使用之前分配/初始化 。
string m=string.Empty;