ItemDataBound事件中语句错在什么地方,总是提示SqlDataReader没有关闭
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem)
{
DataRowView row = e.Item.DataItem as DataRowView;
string dt = row[ "P_ID "].ToString();
SqlConnection con = DB.createCon();
con.Open();
string StrSql= "select * from dragoman where P_ID= ' "+dt+ " ' ";
SqlCommand cmd = new SqlCommand(StrSql,con);
SqlDataReader sdr = cmd.ExecuteReader();
string savename= " ";
if(sdr.Read())
{
while(sdr.Read())
{
string setID = sdr.GetValue(1).ToString();
string StrCmd = "select * from ciceroni where ID= ' "+setID+ " ' ";
SqlCommand cmd1 = new SqlCommand(StrCmd,con);
SqlDataReader sdr1 = cmd1.ExecuteReader();
savename=savename+sdr1.GetValue(1).ToString();
e.Item.Cells[7].Text=StrCmd;
}
}
else
{
Response.Write( "暂无 ");
}
}
------解决方案--------------------SqlDataReader使用完之后要关闭,否则conn一直处于open状态,检查一下你是否没有将conn.open后没有conn.close就有执行conn.open了?
------解决方案--------------------同一conn,dr一定要先关闭conn才可以再用
就是说要dr.close();dr=null;
------解决方案--------------------你那个做法不行,dr里面又有dr,而且用同一conn,建多一个conn吧。
或者换个方法,在sql query下功夫。
------解决方案--------------------string StrSql= "select * from dragoman a ";
" left join ciceroni b on a.id=b.id ";
" where P_ID= ' "+dt+ " ' "
这样用一个dr就行了
------解决方案--------------------代码看起来很有问题
SqlConnection con = DB.createCon();后面又没马上释放,这样行有多少条数据,,便生成多少个连接...连接池的错误提示可能离此不远了..
最好把定义放外面去..
下面的代码也要关闭一下连接:
while(sdr.Read())
{
string setID = sdr.GetValue(1).ToString();
string StrCmd = "select * from ciceroni where ID= ' "+setID+ " ' ";
SqlCommand cmd1 = new SqlCommand(StrCmd,con);
SqlDataReader sdr1 = cmd1.ExecuteReader();
savename=savename+sdr1.GetValue(1).ToString();
e.Item.Cells[7].Text=StrCmd;
sdr1.Close();
}
sdr.Close();
con.Close();
..................无功劳也有苦劳..记得给点分哦...