我新闻类别用的是无限极分类的那种,我现在想调新闻中属于某一个大类的新闻,我用的sql 是 in (.....),现在我就是想写一个递归方法,输入一个新闻大类的id,返回这个新闻大类下的所有小类的id ,因为新闻的分类是无限极,所以得用递归,我自己写了个方法,可不知道哪有问题
代码:
public static string ReturnString_Byd(string id)
{
dbmethod mh = new dbmethod();
StringBuilder sb = new StringBuilder();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid="+id );
while (dr.Read())
{
sb.Append(dr ["n_Id"]);
sb.Append(",");
}
dr.Close();
dr.Dispose();
sb .Append ( ReturnString_Byd2(sb.ToString().Substring(0, sb.Length - 1)));
return sb.ToString().Substring (0,sb .Length -1);
}
public static string ReturnString_Byd2(string str)
{
StringBuilder sb2 = new StringBuilder();
string[] aa = str.Split(',');
foreach (string a in aa)
{
sb2 .Append ( ReturnString_Byd3(a));
}
return sb2.ToString();
}
public static string ReturnString_Byd3(string id)
{
dbmethod mh = new dbmethod();
StringBuilder sb3 = new StringBuilder();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid=" + id);
while (dr.Read())
{
sb3.Append(dr["n_Id"]);
sb3.Append(",");
}
dr.Close();
dr.Dispose();
if (sb3.Length == 0)
{ }
else
{
sb3.Append(ReturnString_Byd2(sb3.ToString().Substring(0, sb3.Length - 1)));
}
return sb3.ToString().Substring(0, sb3.Length - 1);
}
代码:
public static string ReturnString_Byd(string id)
{
dbmethod mh = new dbmethod();
StringBuilder sb = new StringBuilder();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid="+id );
while (dr.Read())
{
sb.Append(dr ["n_Id"]);
sb.Append(",");
}
dr.Close();
dr.Dispose();
sb .Append ( ReturnString_Byd2(sb.ToString().Substring(0, sb.Length - 1)));
return sb.ToString().Substring (0,sb .Length -1);
}
public static string ReturnString_Byd2(string str)
{
StringBuilder sb2 = new StringBuilder();
string[] aa = str.Split(',');
foreach (string a in aa)
{
sb2 .Append ( ReturnString_Byd3(a));
}
return sb2.ToString();
}
public static string ReturnString_Byd3(string id)
{
dbmethod mh = new dbmethod();
StringBuilder sb3 = new StringBuilder();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid=" + id);
while (dr.Read())
{
sb3.Append(dr["n_Id"]);
sb3.Append(",");
}
dr.Close();
dr.Dispose();
if (sb3.Length == 0)
{ }
else
{
sb3.Append(ReturnString_Byd2(sb3.ToString().Substring(0, sb3.Length - 1)));
}
return sb3.ToString().Substring(0, sb3.Length - 1);
}
{
string sSql = "with Res(nodeid, parentid, nodename,Lev) as "
+ "(select parentid,nodeid,nodename,0 as lev from tb where Manager_id='"+parentid +"'"
+ " union all "
+ " select e.parentid,e.nodeid,e.nodename,lev+1 from tb e,Res r where e.parentid=r.nodeid "
+ ")"
+ " select nodeid, parentid, nodename,Lev from Res";
///执行SQL的语句返回datatable。
}
public static DataTable GetLower(string parentid )
{
string sSql = "with Res(nodeid, parentid, nodename,Lev) as "
+ "(select parentid,nodeid,nodename,0 as lev from tb where parentid='"+parentid +"'"
+ " union all "
+ " select e.parentid,e.nodeid,e.nodename,lev+1 from tb e,Res r where e.parentid=r.nodeid "
+ ")"
+ " select nodeid, parentid, nodename,Lev from Res";
///执行SQL的语句返回datatable。
}
打错一个 你把parentid,nodeid 换成你自己的字段名字 再把表名tb换成你的表就能用了
{
StringBuilder sb = new StringBuilder();
dbmethod mh = new dbmethod();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid="+id );
while (dr.Read())
{
if(Chind(dr["n_Id"].ToString())
sb.Append(dr["n_Id"].ToString+",");
esle
sb.Append(string ReturnString_Byd(dr["n_Id"].ToString()) );
}
return sb.ToString();
}
public bool
Chind(string id) //判断是否有子项
{
bool Flag=false;
StringBuilder sb = new StringBuilder();
dbmethod mh = new dbmethod();
SqlDataReader dr = mh.getsqldatareaderbysql("select n_Id from TB_NewsType where n_Nid="+id );
if(dr.Getscheme().Table[0].Rows.Count>0)
Flag=true;
else
Flag=false;
dr.Close();
return Flag;
}
}