asp.net(c#)循环执行存储过程问题
执行一次没有问题,循环执行好象进入了死循环,因为没有报错!
在网上也看了例子,但是都没能解决!
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。不要在循环中创建连接
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;
}
------解决方案--------------------看我这个最优化的,不过不知道你要干什么
--------------------------------------
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;
}
------解决方案--------------------存储过程就是批量执行代码的,一般也是存储过程里面循环多,很少见到循环执行存储过程的
------解决方案--------------------可以循环调用存储过程,但是不要循环创建连接。可以将调用存贮过程的方法写到类里面去或者通用的方法里面去。