已有打开的与此命令相关联的 DataReader,必须首先将它关闭。
请问如何解决呢,这个执行过程的代码是放在一个循环体内,循环到快完的时候就出来错误。
public int exep_getrecord(string spstr,string macno,int mactype,string empno,int verifymode,int dwinoutmode,string date,string time,int workcode)
{
int ret = 0;
try
{
string connectionString = Properties.Settings.Default.standConnectionString.ToString();
SqlConnection conpro = new SqlConnection(connectionString);
//con.ConnectionTimeout = 0;
SqlDataAdapter da = new SqlDataAdapter();
using(da.SelectCommand = new SqlCommand());
da.SelectCommand.Connection = conpro;
da.SelectCommand.CommandText = spstr;
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@macno", macno));
da.SelectCommand.Parameters.Add(new SqlParameter("@mactype", mactype));
da.SelectCommand.Parameters.Add(new SqlParameter("@dwenrollnumber", empno));
da.SelectCommand.Parameters.Add(new SqlParameter("dwverifymode", verifymode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwinoutmode", dwinoutmode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwdate", date));
da.SelectCommand.Parameters.Add(new SqlParameter("dwtime", time));
da.SelectCommand.Parameters.Add(new SqlParameter("dwworkcode", workcode));
da.SelectCommand.CommandTimeout = 0;
conpro.Open();
da.SelectCommand.ExecuteReader(CommandBehavior.CloseConnection);
da.SelectCommand.ExecuteNonQuery();
conpro.Close();
//con.Dispose();
}
catch (SqlException e)
{
ret++;
}
finally
{
}
return ret; }
请问如何解决呢,这个执行过程的代码是放在一个循环体内,循环到快完的时候就出来错误。
public int exep_getrecord(string spstr,string macno,int mactype,string empno,int verifymode,int dwinoutmode,string date,string time,int workcode)
{
int ret = 0;
try
{
string connectionString = Properties.Settings.Default.standConnectionString.ToString();
SqlConnection conpro = new SqlConnection(connectionString);
//con.ConnectionTimeout = 0;
SqlDataAdapter da = new SqlDataAdapter();
using(da.SelectCommand = new SqlCommand());
da.SelectCommand.Connection = conpro;
da.SelectCommand.CommandText = spstr;
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@macno", macno));
da.SelectCommand.Parameters.Add(new SqlParameter("@mactype", mactype));
da.SelectCommand.Parameters.Add(new SqlParameter("@dwenrollnumber", empno));
da.SelectCommand.Parameters.Add(new SqlParameter("dwverifymode", verifymode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwinoutmode", dwinoutmode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwdate", date));
da.SelectCommand.Parameters.Add(new SqlParameter("dwtime", time));
da.SelectCommand.Parameters.Add(new SqlParameter("dwworkcode", workcode));
da.SelectCommand.CommandTimeout = 0;
conpro.Open();
da.SelectCommand.ExecuteReader(CommandBehavior.CloseConnection);
da.SelectCommand.ExecuteNonQuery();
conpro.Close();
//con.Dispose();
}
catch (SqlException e)
{
ret++;
}
finally
{
}
return ret; }
da.SelectCommand.ExecuteReader(CommandBehavior.CloseConnection);
这句话也没用,很奇怪为何不出错, try
{
string connectionString = Properties.Settings.Default.standConnectionString.ToString();
using(SqlConnection conpro = new SqlConnection(connectionString)
{
//con.ConnectionTimeout = 0;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conpro;
da.SelectCommand.CommandText = spstr;
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.Add(new SqlParameter("@macno", macno));
da.SelectCommand.Parameters.Add(new SqlParameter("@mactype", mactype));
da.SelectCommand.Parameters.Add(new SqlParameter("@dwenrollnumber", empno));
da.SelectCommand.Parameters.Add(new SqlParameter("dwverifymode", verifymode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwinoutmode", dwinoutmode));
da.SelectCommand.Parameters.Add(new SqlParameter("dwdate", date));
da.SelectCommand.Parameters.Add(new SqlParameter("dwtime", time));
da.SelectCommand.Parameters.Add(new SqlParameter("dwworkcode", workcode));
da.SelectCommand.CommandTimeout = 0;
conpro.Open();
r=da.SelectCommand.ExecuteReader(CommandBehavior.CloseConnection);
if (r!=null)
{
r.Close();
}
da.SelectCommand.ExecuteNonQuery();
conpro.Close();
//con.Dispose();
}
}
catch(...
按2楼的去掉
da.SelectCommand.ExecuteReader(CommandBehavior.CloseConnection);
后 ,
又提示这个:
超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
内,
{
....
}
加上这个
using(SqlConnection conpro = new SqlConnection(connectionString))
{
....
}
后问题就OK了。