我问一个SqlDataReader的问题!
SqlDataReader dr;
dr=null 和 dr.close()有什么区别?Dr=DataProcess.DataReader(strSql);
while(Dr.Read())
{}public SqlDataReader DataReader(string strSql)
{
try
{
MyConn.Open();
Cmd=new SqlCommand(strSql,MyConn);
Dr=Cmd.ExecuteReader();
return Dr;
}
catch(Exception ex)
{
throw new ArgumentException(ex.Message);
}
finally
{
Dr=null;
MyConn=null;
}
}
问一下为什么我在第一次触发这个事件时成功,为什么我在第二次触发时 产生异常:对象没有被实力话引用!!
SqlDataReader dr;
dr=null 和 dr.close()有什么区别?Dr=DataProcess.DataReader(strSql);
while(Dr.Read())
{}public SqlDataReader DataReader(string strSql)
{
try
{
MyConn.Open();
Cmd=new SqlCommand(strSql,MyConn);
Dr=Cmd.ExecuteReader();
return Dr;
}
catch(Exception ex)
{
throw new ArgumentException(ex.Message);
}
finally
{
Dr=null;
MyConn=null;
}
}
问一下为什么我在第一次触发这个事件时成功,为什么我在第二次触发时 产生异常:对象没有被实力话引用!!
{
Dr=null;
MyConn=null;
}你第2次好象没有给 MyConn new一下
MyConn=null;改成MyConn.close();dr.close()关闭 SqlDataReader 对象
dr=null null 关键字是表示不引用任何对象的空引用的文字值
finally
{
Dr=null;
MyConn=null;
}
的时候已经变为null了,所以你要多次掉的话,就把Dr和MyConn的初始化放在DataReader()里面
可能是连接没有关闭又再次打开,加一句试一试
。。
if (MyConn.State == ConnectionState.Open) MyConn.Close();
MyConn.Open();
。
老大我虽然是个菜鸟被,可你也不能这么虎我呀!
什么叫“有return语句应该不会运行finally里语句”
有try{}catch{}finally{}程式就一定会执行finally{}!!!
改成:Dr=Cmd.ExecuteReader(CommandBehavior.CloseConnection);在你完全不用Dr的时候的代码断写上MyConn.close();
MyConn=null;
--------->
MyConn.Close();
每次启动这个方法的时候,因该
从新new 一个连接对象第二个 finally 里面不能 dr.close(),那么,你的dr将会去不到任何数据,因为返回后,你又把它close掉。第3个 sqlConnection 可以被关掉。因为SqlDataReader已经带有自己的connection,就算你关掉他也可以,但是会产生两个问题a )假设,你是没有带任何参数 也就是CommandBehavior 是default的时候,而且你的Connection 是函数内的变量,最好在finally 关掉,因为sqlconnection 必须人工释放。
b)假设,你是CommandBehavior是CloseConnection,那么Fianlly可以不用写MyConn.close
因为,当你使用dr.close()的时候,会自动把连接也关闭。
----------------
同意 yeke888(小二郎dfgdfg)------------------
每次启动这个方法的时候,因该
从新new 一个连接对象
-----------------------------------
1)finally 里面不能 dr.close(),那么,你的dr将会去不到任何数据,因为返回后,你又把它close掉。2) sqlConnection 可以被关掉。因为SqlDataReader已经带有自己的connection,就算你关掉他也可以读数据。但是会产生两个问题 a )假设,你是没有带任何参数 也就是CommandBehavior 是default的时候,而且你的Connection 是函数内的变量,最好在finally 关掉,因为sqlconnection 必须人工释放。
b)假设,你是CommandBehavior是CloseConnection,那么Fianlly可以不用写MyConn.close
因为,当你使用dr.close()的时候,会自动把连接也关闭。