读书人

简单的全局变量有关问题、显示上次查询

发布时间: 2012-01-10 21:26:51 作者: rapoo

简单的全局变量问题、显示上次查询数据……
页面想实现的功能是,通过读取的ID,获取父级目录名称。可以是无限级的。
代码为:

public string FindCat_str = null;
public string Sql = null;
public string RoleName = null;
public int RoleThreadID = 0;
public int num = 0;

protected string ChaXunChild(object Child)
{
if (Convert.ToInt32(Child).ToString() != "0 ")
{
Sql = "SELECT Role,RoleThreadID FROM In_Role WHERE RoleID = " + Convert.ToInt32(Child) + " ";
SqlDataReader dr = a.GetDataReader(Sql);
if (dr.Read())
{
RoleName = dr[ "Role "].ToString();
RoleThreadID = Convert.ToInt32(dr[ "RoleThreadID "].ToString());
}
dr.Close();

if (FindCat_str != null)
{
FindCat_str = FindCat_str + "- " + RoleName;
}
else
{
FindCat_str = RoleName;
}

if (RoleThreadID.ToString() == "0 ")
{
return FindCat_str;
}
else
{


return ChaXunChild(RoleThreadID);
}
}
else
{
return "未指定 ";
}
}


引用代码是:
<%# ChaXunChild(DataBinder.Eval(Container.DataItem, "RoleID ")) %>


现在的问题是:

第一行读取正确:

111111111111111-技术部

第二行就出现错误

值为:111111111111111-技术部-333333333333333-技术部


而第二行的真正值为333333333333333-技术部

它将第一行的值也赋到第二行里面去了。

请大家帮忙找一下问题……

[解决办法]
改一下,在递归结束时
if (RoleThreadID.ToString() == "0 ")
{
FindCat_str = null;
Sql = null;
RoleName = null;
RoleThreadID = 0;
num = 0;
return FindCat_str;
}
else
{
return ChaXunChild(RoleThreadID);
}
[解决办法]
第二行就出现错误

值为:111111111111111-技术部-333333333333333-技术部


而第二行的真正值为333333333333333-技术部

===========
1。
因为你使用的 FindCat_str 是私有字段(这里你就当它是全局变量吧,实际上完全 OO 的C# 是不应该有 全局变量 这以说法的)

而你又进行自连接操作 FindCat_str = FindCat_str + "- " + RoleName;

肯定是不断的连接字符串了


2。
考虑使用本地(局部)变量,并用 ref 关键字 传递参数,以便可以改变参数

just try

//
protected string ChaXunChild(object Child)
{
string FindCat_str = " ";
return ChaXunChildRecursive(object Child, ref FindCat_str);
}

// 递归实现
protected string ChaXunChildRecursive(object Child, ref string FindCat_str)
{
if (Convert.ToInt32(Child).ToString() != "0 ")
{
Sql = "SELECT Role,RoleThreadID FROM In_Role WHERE RoleID = " + Convert.ToInt32(Child) + " ";
SqlDataReader dr = a.GetDataReader(Sql);
if (dr.Read())
{
RoleName = dr[ "Role "].ToString();
RoleThreadID = Convert.ToInt32(dr[ "RoleThreadID "].ToString());
}
dr.Close();

if (FindCat_str != null)
{
FindCat_str = FindCat_str + "- " + RoleName;
}
else
{
FindCat_str = RoleName;
}

if (RoleThreadID.ToString() == "0 ")
{
return FindCat_str;
}
else
{
ChaXunChildRecursive(RoleThreadID, ref FindCat_str);
//return ChaXunChild(RoleThreadID);
}
}
else
{
FindCat_str = "未指定 ";
//return "未指定 ";
}
}


Hope helpful.

读书人网 >asp.net

热点推荐