C#构造函数代码长,代码段后面一部分代码不执行,求解释

Kevin_117 2013-12-06 09:13:14
做了一个异步多线程Socket客户端程序去连接多个数据采集服务器定时采数。其中每一个服务器建立一个异步SOCKET,每个线程建立一个socket连接,对应的建立一个Station对象进行数据处理,每一个Station对象中包含若干个类group对象,group是处理数据的最小基本单元。在station构造的同时,所有的group同时构造。
group的构造函数代码段比较长,并且需要多次从数据库中读取信息完成初始化。但是代码段后面一部分不执行,不知道是为什么,求大神解释下。
附上代码,第一个断点在SqlDataReader da2 = cmd.ExecuteReader();处;第二个断点在SqlDataReader da3 = cmd.ExecuteReader();
第一个断点可以进入中断,第二个断点则无法进入,第二断点处及后面的代码不执行
 try 
{
this.bureaid=bureaId;
yesterday = DateTime.Now;
standardVoltage = volt;
batteryNumber = batnumber;
standardCapacity = capcity;
groupID = groupid;
ip = stationIP;

InitialFlags();
getDeviceInfo(ip,bureaId);
clearOldRecordTime = DateTime.Now;
for (int i = 0; i < batnumber; i++)
{
myBatterys.Add(new Battery(i + 1));//添加根据单电池数目添加单电池单电池编号1-n
}
SqlConnection con = SqlCon.createConnection();
SqlCommand cmd = con.CreateCommand();
#region 初始化∑Vmax
cmd.CommandText = @"SELECT TOP 1 * FROM group_vmax WHERE ip=@IP AND groupid=@GID";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@IP", ip);
cmd.Parameters.AddWithValue("@GID", groupid);
SqlDataReader da = cmd.ExecuteReader();
if (da.HasRows)
{
while (da.Read())
{
List<double> oldVmax = new List<double>();//局部变量存储Vmax1-10
for (int i = 1; i < 11; i++)
{
string name = "Vmax"+i;
oldVmax.Add((double)da[name]);//局部变量存储以前的Vmax1-Vmax10
oldVmaxSum.Add(oldVmax.Sum());//类成员存储以前的∑Vmax1-∑Vmax10
}
oldVmaxFromMdf = true;
}
}
else
{
for (int i = 1; i < 11; i++)
{
oldVmaxSum.Add(0);//数据库中不存在Vmax即SOH还从来未计算过,则初始化∑Vmax1-∑Vmax10 为0
}
}
da.Close();
da.Dispose();
#endregion 初始化∑Vmax
//-----------------------------------------------------//
#region 初始化电池组SOH,选择最后一次计算的值
cmd.CommandText = @"SELECT TOP 1 groupcapicity FROM group_capicity WHERE ip=@IP AND groupid=@GID ORDER BY caculatedtime DESC ";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@IP", ip);
cmd.Parameters.AddWithValue("@GID", groupID);
SqlDataReader da1= cmd.ExecuteReader();
if (da1.HasRows)
{
while (da1.Read())
{
groupCapacity = (double)da1["groupcapicity"];
}
}
da1.Close();
da1.Dispose();
#endregion 初始化电池组SOH
//-----------------------------------------------------//
#region 初始化单电池SOH
cmd.CommandText = @"SELECT TOP "+batnumber+" batterycapacity,batteryid FROM battery_capicity WHERE ip=@IP AND groupid=@GID ORDER BY caculatedtime DESC ";
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@IP", ip);
cmd.Parameters.AddWithValue("@GID", groupID);
SqlDataReader da2 = cmd.ExecuteReader();
if (da2.HasRows)
{
while (da2.Read())
{
myBatterys[(int)da2["batteryid"]].Capacity = (double)da2["batterycapacity"];
}
}
da2.Close();
da2.Dispose();
#endregion 初始化单电池SOH
//-----------------------------------------------------//
#region 初始化告警信息通信地址
cmd.CommandText = @"SELECT email,cellphone,notice FROM user_info where burea=@id and status=@sta";//选择该局下所有管理员手机和邮箱
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@sta", "正常");
cmd.Parameters.AddWithValue("@id", bureaId);
SqlDataReader da3 = cmd.ExecuteReader();
if (da3.HasRows)
{
while (da3.Read())
{
int index = (int)da3["notice"];
if (index == 1)
{
phones.Add((string)da3["cellphone"]);
}
else if (index == 2)
{
recivemailAddress.Add((string)da3["email"]);
}
else if (index == 3)
{
phones.Add((string)da3["cellphone"]);
recivemailAddress.Add((string)da3["email"]);
}
}
}
da3.Close();
da3.Dispose();
#endregion 初始化告警信息通信地址

con.Close();
con.Dispose();
}

求大神解释啊
...全文
277 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小敏哥 2013-12-07
  • 打赏
  • 举报
回复
在catch代码段中打个断点吧,估计也是异常被捕捉了,下面的代码停止执行了
sswwee 2013-12-06
  • 打赏
  • 举报
回复
3楼正解,不执行一定是被catch了,不加try catch的话vs会提示哪错了怎么错了
devmiao 2013-12-06
  • 打赏
  • 举报
回复
把try catch去掉,看执行到哪里跳出异常。
Kevin_117 2013-12-06
  • 打赏
  • 举报
回复
这段代码测试是完全通过的
Kevin_117 2013-12-06
  • 打赏
  • 举报
回复
程序是多线程的,在拥有5个station的情况,大约有25个group,也就是上面的代码会执行25次之多,我猜想有可能是代码太长,或者是构造函数中sql语句执行次数受限?这个真的不明白,不知道是什么原因,有没有什么好的解决办法,求大神啊

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧