平时自己用着没事,当访问的人数多的时候会出现
在每个SqlDataReader中都用using扩起来了,helper中也用ExecuteReader(CommandBehavior.CloseConnection)了,出现:1.已有打开的与此命令相关联的 DataReader,必须首先将它关闭
2.ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
等错误,如何解决?
在每个SqlDataReader中都用using扩起来了,helper中也用ExecuteReader(CommandBehavior.CloseConnection)了,出现:1.已有打开的与此命令相关联的 DataReader,必须首先将它关闭
2.ExecuteReader 要求已打开且可用的连接。连接的当前状态为正在连接。
等错误,如何解决?
你应该在SqlDataReader调用完了后,确认是都调用完了。在close(),然后Dispose().就行了。
while(..){
..
}
}
这个样子不对么?如果错着呢,正确的如怎么写?能给写个小例子么
try{
..
}
catch()
{...}
fin..{...}原因方便写日记,和处理
{
SetButtonMode(MaintenanceMode.Read);
this.butSearch.Enabled = true;
disableControl();
base.Undo();
}
/// <summary>
/// 保存过程
/// </summary>
/// <returns></returns>
private bool _DoSaved()
{
DataTable dt=(DataTable)binSearch.DataSource; bool blnSave = true; _db.Connect();
_db.BeginTransaction();
try
{ for (int i = 0; i < dt.DefaultView.Count; i++)//主撞颜色表
{ switch (dt.DefaultView[i].Row.RowState)
{
case DataRowState.Modified: IDbCommand insCmd = _db.GetCommand("usp_UpdOrderPlanning");
insCmd.CommandType = CommandType.StoredProcedure;
insCmd.Parameters.Add(_db.GetParameter("@intOrderID", dt.DefaultView[i].Row["OrderID"]));
insCmd.Parameters.Add(_db.GetParameter("@TeamID", dt.DefaultView[i].Row["TeamID"]));
insCmd.Parameters.Add(_db.GetParameter("@dPlanWIPStart", dt.DefaultView[i].Row["dPlanWIPStart"]));
insCmd.Parameters.Add(_db.GetParameter("@dCutting", dt.DefaultView[i].Row["dCutting"]));
insCmd.Parameters.Add(_db.GetParameter("@dPlanWIPFinish", dt.DefaultView[i].Row["dPlanWIPFinish"]));
insCmd.Parameters.Add(_db.GetParameter("@dWIPStart", dt.DefaultView[i].Row["dWIPStart"]));
insCmd.Parameters.Add(_db.GetParameter("@cSewingStatus", dt.DefaultView[i].Row["cSewingStatus"]));
insCmd.Parameters.Add(_db.GetParameter("@cTeamRe", dt.DefaultView[i].Row["cTeamRe"]));
insCmd.Parameters.Add(_db.GetParameter("@dPacking", dt.DefaultView[i].Row["dPacking"]));
insCmd.Parameters.Add(_db.GetParameter("@EditedBy",GlobalService.LoginSession.UserID));
insCmd.Parameters.Add(_db.GetParameter("@dBOM", dt.DefaultView[i].Row["dBOM"])); insCmd.Parameters.Add(_db.GetParameter("@dPaperSample", dt.DefaultView[i].Row["dPaperSample"]));
insCmd.Parameters.Add(_db.GetParameter("@dPlanPur", dt.DefaultView[i].Row["dPlanPur"])); insCmd.Parameters.Add(_db.GetParameter("@dMaterialRece", dt.DefaultView[i].Row["dMaterialRece"])); insCmd.Parameters.Add(_db.GetParameter("@dMainMatReqPur", dt.DefaultView[i].Row["dMainMatReqPur"]));
insCmd.Parameters.Add(_db.GetParameter("@dMainMatIssue", dt.DefaultView[i].Row["dMainMatIssue"]));
insCmd.Parameters.Add(_db.GetParameter("@cMainMatStatus", dt.DefaultView[i].Row["cMainMatStatus"]));
insCmd.Parameters.Add(_db.GetParameter("@cSupMatStatus", dt.DefaultView[i].Row["cSupMatStatus"]));
insCmd.Parameters.Add(_db.GetParameter("@cRes", dt.DefaultView[i].Row["cRes"])); insCmd.Parameters.Add(_db.GetParameter("@WipCompleted", dt.DefaultView[i].Row["WipCompleted"])); insCmd.ExecuteNonQuery(); break; }
} _db.CommitTransaction(); }
catch (Exception ex)
{
_db.RollbackTransaction();
blnSave = false;
MessageBox.Show(ex.Message);
}
finally
{
_db.Disconnect();
}
return blnSave;
}
还有就是不是说using相当于close掉了么,难道有什么问题?
if (connection == null)
{
connection = new SqlConnection(connectionString);
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Closed)
{
connection.Open();
}
else if (connection.State == System.Data.ConnectionState.Broken)
{
connection.Close();
connection.Open();
}
return connection;
using(SqlDataReader dataReader = DBHelper.ExecuteReader(sql, p))
{
if (dataReader.Read())
{
u.Id = Convert.ToInt32(dataReader["Id"]);
}
}//helper
public static SqlDataReader ExecuteReader(string safeSql)
{
SqlCommand cmd = new SqlCommand(safeSql, Connection);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
锁定数据库连接对象。然后连接,执行,完了以后关闭。。释放对象。
{
if (dataReader.Read())
{
u.Id = Convert.ToInt32(dataReader["Id"]);
}
}
这个函数贴完整
怎么锁定?
{
try
{
List<SMSList> smsList = new List<SMSList>(); using(SqlDataReader dataReader = DBHelper.ExecuteReader(sql))
{
while (dataReader.Read())
{
SMSList sms = new SMSList();
sms.User = Convert.ToInt32(dataReader["User"]);
sms.Id = Convert.ToInt32(dataReader["Id"]);
sms.Mobiles = dataReader["Mobiles"].ToString();
sms.Message = dataReader["Message"].ToString();
sms.State = Convert.ToInt32(dataReader["State"]);
sms.SendTime = Convert.ToDateTime(dataReader["SendTime"]); smsList.Add(sms);
}
}
return smsList;
}
catch (Exception ex)
{
er.WriteSensitive(ex);
return null;
}
}就这个样子咯
这样对么?这样就不报错了,只是这个helper是老师给的,我觉得不应该在这种地方会有错误吧,哎~