日期:2014-05-20  浏览次数:20411 次

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;
}

------解决方案--------------------
存储过程就是批量执行代码的,一般也是存储过程里面循环多,很少见到循环执行存储过程的
------解决方案--------------------
可以循环调用存储过程,但是不要循环创建连接。可以将调用存贮过程的方法写到类里面去或者通用的方法里面去。