C#超出处理多个sql语句的范围

时间:2012-07-26 08:06:16

标签: c# sql

我有这段代码:

变量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();

2 个答案:

答案 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;
相关问题