我想声明一个 MySqlDataReader,而不对其进行初始化或为其分配任何值。就像下面的代码。
MySqlDataReader rdr;
try
{ /* stuff to open the MySqlDataReader and use it, not important for my question */ }
catch (Exception e)
{ /* error handling stuff, not important for my question */ }
finally
{
/* code to close the reader when things have gone wrong */
try
{
if (rdr != null)
{
if (rdr.IsClosed == false)
{
rdr.Close();
}
}
}
catch (Exception e)
{ /* error handling stuff, not important for my question */ }
}
这样做的原因是我想在 try 的 finally 部分关闭 MySqlDataReader,如果它确实确实出现了运行时错误。所以 MySqlDataReader 必须在 try 之前声明,否则它将超出 finally 代码的范围。
但是,当我编译上面的代码时,我得到编译时错误“使用未分配的局部变量'rdr'”,所以我想将它设置为例如
MySqlDataReader rdr = New MySqlDataReader();
但这给了我一个编译时错误“'MySql.Data.MySqlClient.MySqlDataReader' 类型没有定义构造函数”。并且分配命令对象的结果将使代码编译但是可能会出错,这就是我的尝试试图捕捉的。
当第二次调用这个函数时,如果 MySqlDataReader 对象没有从第一次迭代中关闭,那么它将第二次崩溃。
那么当出现问题时如何清理我的 MySqlDataReader 对象呢?