请看这段返回OleDbDataReader的代码究竟有哪些错误?

fywindy 2013-08-01 01:46:05

this.TreeView2.Clear();//清TreeView的节点
public OleDbDataReader ExecuteQueryReturnReader(string sql, string connStr)
{
OleDbConnection conn = new OleDbConnection();
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(connStr);
conn.Open();

OleDbCommand command = conn.CreateCommand();
command.CommandText = sql;
reader = command.ExecuteReader();

}
catch(Exception ex)
{

}
finally
{
//if (conn != null)
//conn.Close();
}
return reader;
}


这是类里面封装的一种方法,我这么用以上的代码:
 string TableName = "";
string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DataBase;
ExecSql con = new ExecSql();
string ID = string.Format("select NodeID from config where Name='{0}'",e.Node.Text);
OleDbDataReader p = con.ExecuteQueryReturnReader(ID, strConnection);
if(p == null)
{

MessageBox.Show("222");
}
if (p != null)
{
while (p.Read())
{
TableName = p[0].ToString();

}
p.Close();
}
else
{

}

string sql = string.Format("select FaID from {0}",TableName);
OleDbDataReader p2 = con.ExecuteQueryReturnReader(sql, strConnection);
if(p2 != null)
{
while(p2.Read())
{
for(int i=0;i<p2.FieldCount;i++)
{
if (string.Compare(p2[i].ToString(),"0",true) == 0)
{
string Name = string.Format("select Name from {0} where FaID={1}", TableName, "0");

OleDbDataReader N = con.ExecuteQueryReturnReader(Name, strConnection);
if(N != null)
{
while (N.Read())
{
string NodeName = N[0].ToString();
EvebtTree2AddData(NodeName);


}
N.Close();

}

}
else if (string.Compare(p2[i].ToString(),"101",true) == 0)
{
string Name = string.Format("select Name from {0} where FaID={1}", TableName, "101");
OleDbDataReader N = con.ExecuteQueryReturnReader(Name, strConnection);
while (N.Read())
{
string NodeName = N[0].ToString();
SerialNodes = new TreeNode();
SerialNodes.Text = NodeName;
rootnode2.Nodes.Add(SerialNodes);
}
N.Close();
}
else if (string.Compare(p2[i].ToString(),"102",true) == 0)
{
string Name = string.Format("select Name from {0} where FaID={1}", TableName, "102");
OleDbDataReader N = con.ExecuteQueryReturnReader(Name, strConnection);
while (N.Read())
{
string NodeName = N[0].ToString();
TreeNode NewNodes = new TreeNode();
NewNodes.Text = NodeName;
SerialNodes.Nodes.Add(NewNodes);
}
N.Close();
}
else
{

}
}
}
p2.Close();
}

this.treeView2.ExpandAll();
}

大致的意思就是我单机TreeView1的节点然后根据数据库里面的数据建立ViewTree2的节点(如图),但是当我单击多次TreeView的时候就会出现数据库读取错误,经常会出现 OleDbDataReader 变量返回为空的情况,从而导致程序崩溃,另外不知道什么原因Treeview2的节点有时候会重复建立,请哪位大侠帮帮忙解答一下!!!PS:
注:(例如当我每次单击2的时候就会从数据库读出数据从而建立另一边树的节点,但是不知道为什么节点会重复建立,而且当多次单击的时候 OleDbDataReader 就会返回为空,从而导致程序崩溃)
...全文
66 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧