首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

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

简单的全局变量问题、显示上次查询数据……
页面想实现的功能是,通过读取的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.

热点排行