for (int i = 0; i < dt1.Rows.Count; i++)
            {
                sa = (string[])ArrayList.Adapter((Array)dt1.Rows[i]["ModuleID"]).ToArray(typeof(string));
                string s2 = "select * from ws_system where M_ParentID = " + sa[i] + "";
                
            }
大概意思是这个意思,就是把dt1.Rows[i]["ModuleID"]赋值给string数组sa,然后查询。但是这样写是不行的,在循环外调用不了。求一个可用的方法

解决方案 »

  1.   

    dt1.Rows[i]["ModuleID"]好像只是一个值吧,你为什么用数组接收,还ToArray。你直接用string类型的sa接收,tostring()不就得了,下面直接写+sa+
      

  2.   


    for (int i = 0; i < dt1.Rows.Count; i++)
                {
                   string sa = dt1.Rows[i]["ModuleID"]).Tostring().trim();
                    string s2 = "select * from ws_system where M_ParentID = " + sa + "";
                    
                }
      

  3.   

    string sql2 = "select * from ws_system where M_ParentID in (select ModuleID from ws_system where M_PageCode in (select Pagecode from ws_RolePermission where roleid=(select Power from ws_User where id='" + c.ID + "')))";
    首先,我数组接收是为了这个查询,我要循环查询,where M_ParentID in 后面是1,2,3,4,8我要的效果是
    where M_ParentID =1,然后where M_ParentID =2,where M_ParentID =3, where M_ParentID =4  ,where M_ParentID =8
      

  4.   

    还不是很清楚,
    List<int> ids=new List<int>();
    for (int i = 0; i < dt1.Rows.Count; i++)
                {
                    ids.Add(Convert.ToInt32(dt1.Rows[i]["ModuleID"]));
                    string s = "select * from ws_system where M_ParentID = " +dt1.Rows[i]["ModuleID"].ToString()+ "";                
                }
    外面你想怎么用ids就怎么用
      

  5.   

    从你的查询语句可以看出,你完全是个SQL外行,就连多表关联查询都不会写,你这里只要一条SQL语句就可以搞定的,你却要分多次查询嵌套,我都不想看你的那个C#代码了,你的问题应该从SQL语句的地方找起,改写SQL,一步执行到位,提高效率。
      

  6.   

    我说大哥,说了一堆,就一句有用(改写SQL,一步执行到位,提高效率。),麻烦下回不要说这么多废话行么?我是外行怎么了?我内行就不问了。
      

  7.   

    懒得看 sql 正不正确了DataTable 转换成 String[] 可以这样string[] ary = Array.ConvertAll<DataRow,string>(datatable.Rows, r=>r["ModuleID"].ToString());
      

  8.   


    public DataTable Module_SelectByID( Userl c)
            {
                
                string sql2 = "select ModuleID from ws_system where M_PageCode in (select Pagecode from ws_RolePermission where roleid=(select Power from ws_User where id='" + c.ID + "'))";
                /****************************************************************************************************************/
                DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
                
                List<DataTable> ass = new List<DataTable>();
                
                for (int i = 0; i < dt1.Rows.Count; i++)
                {
                   string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
                    string s2 = "select * from ws_system where M_ParentID = " + sa + "";
                    
                }
                    if (dt1.Rows.Count > 0)
                    { return dt1; }
                    else
                    { return null; }
                
            }是这样的,生成菜单,要一个一个的添加子菜单,五个菜单,添加五次(子菜单不一样)。一条SQL肯定不行的(或者我菜鸟不知道),所以用到循环和数组。我的知识有限,所以用for和string数组。没实现,求一个解决方法,传值啊,存储过程啊都行。
      

  9.   


    public DataTable Module_SelectByID( Userl c)
    {
          string sql2 = "select ModuleID from ws_system where M_PageCode in (select " + "Pagecode from ws_RolePermission where roleid=(select Power from ws_User where " + "id='" + c.ID + "'))";
          DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
          string s2 = string.Empty;
          for (int i = 0; i < dt1.Rows.Count; i++)
          {
               string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
               s2 = s2 + sa + ",";
          }
          s2 = s2.Remove(s2.LastIndexOf(","), 1);//这里是去掉最后一个,号,你也可以用其他方法去掉,号
          string sql3 = "select * from ws_system where M_ParentID in (" + s2 + ")";
          DataTable dtMenu = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
          return dtMenu;
    }不知道这个是不是你想要的效果
      

  10.   

    有点地方写错了public DataTable Module_SelectByID( Userl c)
    {
          string sql2 = "select ModuleID from ws_system where M_PageCode in (select " + "Pagecode from ws_RolePermission where roleid=(select Power from ws_User where " + "id='" + c.ID + "'))";
          DataTable dt1 = DbHelperSQL.Query(sql2.ToString()/*, parameters*/).Tables[0];
          string s2 = string.Empty;
          for (int i = 0; i < dt1.Rows.Count; i++)
          {
               string sa = dt1.Rows[i]["ModuleID"].ToString().Trim();
               s2 = s2 + sa + ",";
          }
          s2 = s2.Remove(s2.LastIndexOf(","), 1);//这里是去掉最后一个,号,你也可以用其他方法去掉,号
          string sql3 = "select * from ws_system where M_ParentID in (" + s2 + ")";
          DataTable dtMenu = DbHelperSQL.Query(sql3).Tables[0];
          return dtMenu;
    }
      

  11.   

    后台dalpublic DataTable Module_SelectByID(string ModuleID)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select * from ws_system where M_ParentID = " + ModuleID + "");
                DataTable dt = new DataTable();
                dt = DbHelperSQL.Query(sb.ToString()/*, parameters*/).Tables[0];
                if (dt.Rows.Count > 0)
                { return dt; }
                else
                { return null; }
            }后台csHtmlInputHidden hidd = (HtmlInputHidden)e.Item.FindControl("Hidden1");
                string i = hidd.Value;
                
                c.ID = Session["user"].ToString();
                DataTable dt = bll.Module_SelectByID(i.ToString());            if (dt.DefaultView.Count > 0)
                {
                    Repeater LeftSubID = (Repeater)e.Item.FindControl("LeftMenu_Sub");
                    LeftSubID.DataSource = dt;
                    LeftSubID.DataBind();
                }
                else
                {
                    e.Item.Visible = false;
                }谢谢各位,现在结贴给分!我是这么做的。已经实现了。