执行一次没有问题,循环执行好象进入了死循环,因为没有报错!
在网上也看了例子,但是都没能解决!
DataView dv=systemOb.getRegionByStore(0,int.Parse(Config.regionRank[0]));
    DataView dv1;
for(int i=0;i<dv.Count;i++)
{
SqlConnection conn=new SqlConnection(Config.strConn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "getRegion";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Clear();
da.SelectCommand.Parameters.Add("@parentId",int.Parse(dv[i]["id"].ToString()));
da.SelectCommand.Parameters.Add("@rank",int.Parse(Config.regionRank[1])); da.Fill(ds);
dv1=ds.Tables[0].DefaultView;
}

解决方案 »

  1.   

    先简化一下你的代码,就像楼上所说,不要每次循环都new SqlConnection,在循环上面new一次就行了。
    你可以调试一下,看看你的代码在哪出的问题。
      

  2.   

    DataView dv=systemOb.getRegionByStore(0,int.Parse(Config.regionRank[0]));
        DataView dv1;
    SqlConnection conn=new SqlConnection(Config.strConn);
    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = new SqlCommand();
    da.SelectCommand.Connection = conn;
    da.SelectCommand.CommandText = "getRegion";
    da.SelectCommand.CommandType = CommandType.StoredProcedure; for(int i=0;i<dv.Count;i++)
    {
    //循環內改變相應參數值即可。 da.SelectCommand.Parameters.Clear();
    da.SelectCommand.Parameters.Add("@parentId",int.Parse(dv[i]["id"].ToString()));
    da.SelectCommand.Parameters.Add("@rank",int.Parse(Config.regionRank[1])); //這裡有個疑問,樓主循環後所返回的值想如何處理?
    //像下面這樣做,得到的結果也只是最後一次循環的值而已...

    da.Fill(ds);
    dv1=ds.Tables[0].DefaultView;
    }
      

  3.   

    SqlConnection 没有OPEN也没有CLOSE.应该是没反应的
      

  4.   


    DataView dv=systemOb.getRegionByStore(0,int.Parse(Config.regionRank[0]));
    DataView dv1;
    SqlConnection conn=new SqlConnection(Config.strConn);
    SqlDataAdapter da = new SqlDataAdapter();
    for(int i=0;i<dv.Count;i++)
    {
    da.SelectCommand = new SqlCommand();
    da.SelectCommand.Connection = conn;
    da.SelectCommand.CommandText = "getRegion";
    da.SelectCommand.CommandType = CommandType.StoredProcedure;
    da.SelectCommand.Parameters.Clear();
    da.SelectCommand.Parameters.Add("@parentId",int.Parse(dv[i]["id"].ToString()));
    da.SelectCommand.Parameters.Add("@rank",int.Parse(Config.regionRank[1])); da.Fill(ds);
    dv1=ds.Tables[0].DefaultView;
    }这段是没有在循环中创建连接的代码,试了也不行
    下面的是存储过程:
    ALTER PROCEDURE getRegion
    (
    @parentId as int,
    @rank as int
    )
    AS
    if(@parentId<>0)
    select * from region where id<>@parentId and parentId=@parentId 
    else
    select * from region where rank=@rank
    /* SET NOCOUNT ON */
    RETURN
      

  5.   

    to ydsunny(小强) //這裡有個疑問,樓主循環後所返回的值想如何處理?
    //像下面這樣做,得到的結果也只是最後一次循環的值而已...
    da.Fill(ds);
    dv1=ds.Tables[0].DefaultView;怎么处理不重要,只要能循环执行存储过程就行了
      

  6.   

    看我这个最优化的,不过不知道你要干什么
    --------------------------------------------------------------------------
    DataView dv=systemOb.getRegionByStore(0,int.Parse(Config.regionRank[0]));
    DataView dv1;SqlConnection conn = new SqlConnection(Config.strConn);
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "getRegion";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@parentId",SqlDbType.Int);
    cmd.Parameters.Add("@rank",SqlDbType.Int);
    SqlDataAdapter da = new SqlDataAdapter(cmd);for(int i=0;i<dv.Count;i++)
    {
    cmd.Parameters[0].Value=dv[i]["id"] as int;
    cmd.Parameters[1].Value=int.Parse(Config.regionRank[1]);
    da.Fill(ds);
    dv1=ds.Tables[0].DefaultView;
    }
      

  7.   

    谢谢大家,用了ydsunny(小强)和leohuang(LEO)方法,都不行,下面是全部代码,之前是用SQL语句时,代码运行没有问题,但是比较慢,所以想用存储过程,碰到循环存储过程就不行了
    public void getRegionList()
    { try
    {
    DataSet ds=new DataSet();
    DataView dv1;
    string str="";
    sql="select * from region where rank="+Config.regionRank[0];
    DataView dv=Db.ExecuteSQLForDS(sql).Tables[0].DefaultView;
    // DataView dv=systemOb.getRegionByStore(0,int.Parse(Config.regionRank[0]));
    SqlConnection conn = new SqlConnection(Config.strConn);
    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "getRegion";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@parentId",SqlDbType.Int);
    cmd.Parameters.Add("@rank",SqlDbType.Int);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    for(int i=0;i<dv.Count;i++)
    {
    str=str+"<tr><td>"+dv[i]["id"]+"</td><td><b>"+dv[i]["name"]+"</b></td><td><a href=regionUpdate.aspx?id="+dv[i]["id"]+">编辑</a></td><td><a href=regionList.aspx?action=del&id="+dv[i]["id"]+">删除</a></td></tr>";
    // string sql1="select * from region where rank="+Config.regionRank[1]+" and parentId="+dv[i]["id"];
    // DataView dv1=Db.ExecuteSQLForDS(sql1).Tables[0].DefaultView;
    // DataView dv1=systemOb.getRegionByStore(int.Parse(dv[i]["id"].ToString()),int.Parse(Config.regionRank[1]));
    cmd.Parameters[0].Value=int.Parse(dv[i]["id"].ToString());
    cmd.Parameters[1].Value=int.Parse(Config.regionRank[1]); da.Fill(ds);
    dv1=ds.Tables[0].DefaultView;
    for(int j=0;j<dv1.Count;j++)
    {
    str=str+"<tr><td>"+dv1[j]["id"]+"</td><td>&nbsp;├"+dv1[j]["name"]+"</td><td><a href=regionUpdate.aspx?id="+dv1[j]["id"]+">编辑</a></td><td><a href=regionList.aspx?action=del&id="+dv1[j]["id"]+">删除</a></td></tr>";
    string sql2="select * from region where rank="+Config.regionRank[2]+" and parentId="+dv1[j]["id"];
    DataView dv2=Db.ExecuteSQLForDS(sql2).Tables[0].DefaultView;
    // DataView dv2=systemOb.getRegionByStore(int.Parse(dv[j]["id"].ToString()),int.Parse(Config.regionRank[2]));
    for(int k=0;k<dv2.Count;k++)
    {
    str=str+"<tr><td>"+dv2[k]["id"]+"</td><td>&nbsp;&nbsp;&nbsp├"+dv2[k]["name"]+"</td><td><a href=regionUpdate.aspx?id="+dv2[k]["id"]+">编辑</a></td><td><a href=regionList.aspx?action=del&id="+dv2[k]["id"]+">删除</a></td></tr>";
    string sql3="select * from region where rank="+Config.regionRank[3]+" and parentId="+dv2[k]["id"];
    DataView dv3=Db.ExecuteSQLForDS(sql3).Tables[0].DefaultView;
    // DataView dv3=systemOb.getRegionByStore(int.Parse(dv[k]["id"].ToString()),int.Parse(Config.regionRank[3]));
    for(int h=0;h<dv3.Count;h++)
    {
    str=str+"<tr><td>"+dv3[h]["id"]+"</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;├"+dv3[h]["name"]+"</td><td><a href=regionUpdate.aspx?id="+dv3[h]["id"]+">编辑</a></td><td><a href=regionList.aspx?action=del&id="+dv3[h]["id"]+">删除</a></td></tr>";
    }
    }
    }
    }
    this.regionData.Text=str;
    //this.Response.Write(sql);
    }
    catch(System.Exception ex)
    {
    Config.errPro(ex);
    }
    }
      

  8.   

    小弟不才,刚开始用存储过程,问题已经解决了,谢谢大家,接分
    是 da.Fill(ds);的问题,因为之前没有用ds.clear(),导致ds无限增长!