..net2003下使用Treeview+ajax+XML无刷新树
琢磨半天,才搞出来.想想都2008了,我还在用2003,落后啊...
落后是要挨打的.
在此地保存一下.方便日后使用
数据表
CREATE TABLE [dbo].[u_emp_group](
[group_id] [int] IDENTITY(1,1) NOT NULL,
[group_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[group_level] [int] NULL,
[input_user] [int] NULL,
[submit_date] [datetime] NULL CONSTRAINT [DF_u_emp_group_submit_date] DEFAULT (getdate()),
[deleted] [int] NULL CONSTRAINT [DF_u_emp_group_deleted] DEFAULT (0),
[is_admin] [int] NULL CONSTRAINT [DF_u_emp_group_is_admin] DEFAULT (0),
CONSTRAINT [PK_u_emp_group] PRIMARY KEY CLUSTERED
(
[group_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
--------------------
CREATE TABLE [dbo].[u_emp](
[user_id] [int] IDENTITY(1,1) NOT NULL,
[user_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[user_pwd] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,
[emp_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[group_id] [int] NULL,
[emp_tel] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[is_stop] [int] NULL CONSTRAINT [DF_u_emp_is_valid] DEFAULT (0),
[input_user] [int] NULL,
[submit_date] [datetime] NULL CONSTRAINT [DF_u_emp_submit_date] DEFAULT (getdate()),
[deleted] [int] NULL CONSTRAINT [DF_u_emp_deleted] DEFAULT (0),
[is_admin] [int] NULL CONSTRAINT [DF_u_emp_is_admin] DEFAULT (0),
CONSTRAINT [PK_u_emp] PRIMARY KEY CLUSTERED
(
[user_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
------------------
CREATE TABLE [dbo].[u_emp_level](
[level_id] [int] IDENTITY(1,1) NOT NULL,
[employee_id] [int] NULL,
[employee_name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[source_table] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[levelNo] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[contact] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[insertDate] [datetime] NULL CONSTRAINT [DF_u_emp_level_insertDate] DEFAULT (getdate()),
[flag] [int] NULL CONSTRAINT [DF_u_emp_level_flag] DEFAULT (0),
CONSTRAINT [PK_u_emp_level] PRIMARY KEY CLUSTERED
(
[level_id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
GO
---------------
前台页面代码:EmployeeView.aspx
<% ... @ Page language="c#" Codebehind="EmployeeView.aspx.cs" AutoEventWireup="false" Inherits="TestSelf.Sys.employee.EmployeeView" %>
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< HTML >
< HEAD >
< title > EmployeeView </ title >
< meta content ="Microsoft Visual Studio .NET 7.1" name ="GENERATOR" >
< meta content ="C#" name ="CODE_LANGUAGE" >
< meta content ="JavaScript" name ="vs_defaultClientScript" >
< meta content ="http://schemas.microsoft.com/intellisense/ie5" name ="vs_targetSchema" >
< LINK href ="../../~Css/Main.css" type ="text/css" rel ="stylesheet" >
< script language ="javascript" src ="employee.js" > ...
</ script >
</ HEAD >
< body bottomMargin ="0" leftMargin ="0" topMargin ="0" rightMargin ="0" MS_POSITIONING ="GridLayout" >
< table cellSpacing ="0" cellPadding ="0" width ="100%" border ="0" >
< tr >
< td bgColor ="#999999" height ="24" >< strong class ="highlight" >< font style ="FONT-SIZE: 10pt; FONT-FAMILY: 宋体" color ="#ffffff" >< u > 组织结构管理 </ u ></ font ></ strong >
</ td >
</ tr >
</ table >
< form id ="Form1" method ="post" runat ="server" >
< FONT face ="宋体" ></ FONT >
< DIV style ="DISPLAY: inline; Z-INDEX: 109; LEFT: 32px; WIDTH: 70px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
ms_positioning ="FlowLayout" > 组织结构 </ DIV >
< iewc:treeview id ="LevelTreeView" style ="Z-INDEX: 100; LEFT: 32px; POSITION: absolute; TOP: 64px"
runat ="server" name ="LevelTreeView" Width ="248px" AutoSelect ="True" Height ="544px" ExpandLevel ="2"
BorderStyle ="Inset" BackColor ="White" SystemImagesPath ="/webctrl_client/1_0/treeimages/" ImageUrl ="./pic/Close.gif"
ExpandedImageUrl ="./pic/Open.gif" ></ iewc:treeview >< INPUT id ="RightButton" style ="Z-INDEX: 101; LEFT: 296px; WIDTH: 48px; POSITION: absolute; TOP: 160px; HEIGHT: 24px"
onclick ="ToListBox()" type ="button" value =">>" name ="RightButton" > < INPUT id ="LeftButton" style ="Z-INDEX: 102; LEFT: 296px; WIDTH: 48px; POSITION: absolute; TOP: 112px; HEIGHT: 24px"
onclick ="ToTree()" type ="button" value ="<<" name ="LeftButton" >
< DIV style ="DISPLAY: inline; Z-INDEX: 108; LEFT: 392px; WIDTH: 56px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
ms_positioning ="FlowLayout" > 用户列表 </ DIV >
< INPUT id ="groupRadio" style ="Z-INDEX: 104; LEFT: 368px; POSITION: absolute; TOP: 40px"
onclick ="ShowUserListbox()" type ="radio" CHECKED name ="listRadio" >
< DIV style ="DISPLAY: inline; Z-INDEX: 105; LEFT: 512px; WIDTH: 56px; POSITION: absolute; TOP: 44px; HEIGHT: 15px"
ms_positioning ="FlowLayout" > 岗位列表 </ DIV >
< INPUT id ="userRadio" style ="Z-INDEX: 103; LEFT: 488px; POSITION: absolute; TOP: 40px"
onclick ="ShowGroupListbox()" type ="radio" name ="listRadio" >
< SELECT id ="userSelect" style ="Z-INDEX: 107; LEFT: 360px; VISIBILITY: visible; WIDTH: 248px; POSITION: absolute; TOP: 64px; HEIGHT: 544px"
size ="34" name ="userSelect" runat ="server" >
< OPTION ></ OPTION >
</ SELECT >
< SELECT id ="groupSelect" style ="Z-INDEX: 110; LEFT: 624px; VISIBILITY: hidden; WIDTH: 248px; POSITION: absolute; TOP: 64px; HEIGHT: 544px"
size ="22" name ="groupSelect" runat ="server" >
< OPTION ></ OPTION >
</ SELECT >
</ form >
</ body >
</ HTML >
后台代码:EmployeeView.aspx.cs
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
using System.Xml;
using TestSelf..Sys.Classemployee;
using TestSelf..Sys.employee.BuildXML;
namespace TestSelf..Sys.employee
... {
/**//// <summary>
/// EmployeeView 的摘要说明。
/// </summary>
public class EmployeeView : System.Web.UI.Page
...{
protected Microsoft.Web.UI.WebControls.TreeView LevelTreeView;
protected System.Web.UI.HtmlControls.HtmlSelect userSelect;
protected System.Web.UI.HtmlControls.HtmlSelect groupSelect;
private EmployeeClass Emp ; //Employee类
private void Page_Load(object sender, System.EventArgs e)
...{
// 在此处放置用户代码以初始化页面
AjaxPro.Utility.RegisterTypeForAjax(typeof(EmployeeView));
InitData();
FullInUserList();
FullInGroupList();
RunXML();
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
...{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
...{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/**//// <summary>
/// 初始化
/// </summary>
private void InitData()
...{
Emp = new EmployeeClass();
Emp.server_name = Session["server_name"].ToString();
Emp.server_username = Session["server_username"].ToString();
Emp.server_password = Session["server_password"].ToString();
Emp.database_name = Session ["database_name"].ToString();
Emp.InitData();
}
private void FullInUserList()
...{
DataTable dsUserList = new DataTable();
dsUserList = Emp.GetUsers();
int count = dsUserList.Rows.Count;
ListItem[] items = new ListItem[count];
for (int i = 0 ; i < count ; i++)
...{
items[i] = new ListItem(dsUserList.Rows[i]["emp_name"].ToString(),dsUserList.Rows[i]["user_id"].ToString());
}
userSelect.Items.AddRange(items);
}
private void FullInGroupList()
...{
DataTable dsGroupList = new DataTable();
dsGroupList = Emp.GetGroup();
int count = dsGroupList.Rows.Count;
ListItem[] items = new ListItem[count];
for (int i = 0 ; i < count ; i++)
...{
items[i] = new ListItem(dsGroupList.Rows[i]["group_name"].ToString(),dsGroupList.Rows[i]["group_id"].ToString());
}
groupSelect.Items.AddRange(items);
}
private void RunXML()
...{
DataTable dsTree = new DataTable();
dsTree = Emp.GetTreeData();
Hashtable ht = new Hashtable() ;
ht.Add("Text","employee_name");
ht.Add("NodeData","LevelNo");
ht.Add("Target","source_table");
ht.Add("ID","employee_id");
BuildTreeXML BTreeXML = new BuildTreeXML();
string FieldName = BTreeXML.CreateXML(dsTree,ht);
LevelTreeView.Nodes.Clear() ;
LevelTreeView.TreeNodeSrc =FieldName;
LevelTreeView.DataBind();
}
AjaxPro方法#region AjaxPro方法
[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
public void InsertTreeDataToDB(string TableType,string curNodeValue,string curNodeText,string curlevelNo)
...{
EmployeeClass EmpTemp = new EmployeeClass();
EmpTemp.server_name = Session["server_name"].ToString();
EmpTemp.server_username = Session["server_username"].ToString();
EmpTemp.server_password = Session["server_password"].ToString();
EmpTemp.database_name = Session ["database_name"].ToString();
EmpTemp.InitData();
Hashtable ht = new Hashtable() ;
ht.Add("employee_id",curNodeValue.Trim()) ;
ht.Add("employee_name","'"+curNodeText.Trim()+"'") ;
ht.Add("source_table","'"+TableType.Trim()+"'") ;
ht.Add("levelNo","'"+curlevelNo.Trim()+"'");
EmpTemp.InsertLevel(ht) ;
}
[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
public void DeleteTreeDataFromDB(string Employee_idStr,string SourceTableStr)
...{
EmployeeClass EmpTemp = new EmployeeClass();
EmpTemp.server_name = Session["server_name"].ToString();
EmpTemp.server_username = Session["server_username"].ToString();
EmpTemp.server_password = Session["server_password"].ToString();
EmpTemp.database_name = Session ["database_name"].ToString();
EmpTemp.InitData();
EmpTemp.DeleteLevel(Employee_idStr,SourceTableStr) ;
}
#endregion
}
}
自定义类Employee.cs
using System.Data;
using System.Collections;
using TestSelf..PM;
namespace TestSelf..Sys.Classemployee
... {
/**//// <summary>
/// EmployeeClass 的摘要说明。
/// </summary>
public class EmployeeClass
...{
私有成员#region 私有成员
private IProjectManage IPm;
private string _server_name;
private string _server_username ;
private string _server_password ;
private string _database_name;
#endregion 私有成员
属性#region 属性
public string server_name
...{
set
...{
this._server_name = value;
}
get
...{
return this._server_name;
}
}
public string server_username
...{
set
...{
this._server_username = value;
}
get
...{
return this.server_username;
}
}
public string server_password
...{
set
...{
this._server_password = value;
}
get
...{
return this._server_password;
}
}
public string database_name
...{
set
...{
this._database_name = value ;
}
get
...{
return this._database_name ;
}
}
#endregion 属性
方法#region 方法
public EmployeeClass()
...{
//
// TODO: 在此处添加构造函数逻辑
//
}
public void InitData()
...{
IPm = new ProjectManage(_server_name,_server_username,_server_password,_database_name);
}
/**//// <summary>
/// 得到用户列表
/// </summary>
public DataTable GetUsers()
...{
string sqlStr = "Select * from u_emp where user_id not in (select employee_id from u_emp_level where source_table = '1')";
return IPm.GetDateValue(sqlStr).Tables[0];
}
/**//// <summary>
/// 得到指定用户的详细信息
/// </summary>
/// <param name="strValue">用户ID</param>
/// <returns></returns>
public DataTable GetUsers(string strValue)
...{
string SqlStr = "Select * from u_emp where user_id = '"+strValue+"' ";
return IPm.GetDateValue(SqlStr).Tables[0];
}
/**//// <summary>
/// 得到组列表
/// </summary>
public DataTable GetGroup()
...{
string sqlStr = "Select * from u_emp_group where group_id not in (select employee_id from u_emp_level where source_table = '0')";
return IPm.GetDateValue(sqlStr).Tables[0];
}
/**//// <summary>
/// 得到指定组的详细信息
/// </summary>
/// <param name="strValue">组ID</param>
/// <returns></returns>
public DataTable GetGroup(string strValue)
...{
string SqlStr = "Select * from u_emp_group where group_id = '"+strValue+"' ";
return IPm.GetDateValue(SqlStr).Tables[0];
}
public DataTable GetTreeData()
...{
string SqlStr = " Select * from u_emp_level order by levelNo ";
return IPm.GetDateValue(SqlStr).Tables[0];
}
/**//// <summary>
/// 向u_emp_level插入数据
/// </summary>
/// <param name="LevelTable">哈西表,键值为字段名,值为字段值</param>
/// <returns>影响行数</returns>
public int InsertLevel(Hashtable LevelTable)
...{
int Count = 0;
if (LevelTable.Count<=0)
...{
return -1;
}
String Fields = " (";
String Values = " Values(";
foreach(DictionaryEntry item in LevelTable)
...{
if (Count!=0)
...{
Fields += ",";
Values += ",";
}
Fields += "["+item.Key.ToString()+"]";
Values += item.Value.ToString();
Count ++;
}
Fields += ")";
Values += ")";
String SqlString = "Insert into u_emp_level "+Fields+Values;
return IPm.ExecuteData(SqlString);
}
/**//// <summary>
/// 删除u_emp_level中的数据
/// </summary>
/// <param name="IDStr">ID值</param>
/// <param name="TableStr">表名</param>
/// <returns>影响行数</returns>
public int DeleteLevel(string IDStr,string TableStr )
...{
String SqlString = "delete from u_emp_level where employee_id = "+IDStr+" and source_Table = "+TableStr+"" ;
return IPm.ExecuteData(SqlString);
}
private ArrayList ColumnToList(DataRowCollection Rows)
...{
ArrayList List = new ArrayList();
foreach ( DataRow Row in Rows)
...{
List.Add(Row["employee_id"].ToString()) ;
}
return List ;
}
/**//// <summary>
/// 根据人员id获得该人员管辖的某岗位人员的id列表
/// </summary>
/// <param name="UserID">人员id</param>
/// <returns>人员的id列表</returns>
public ArrayList GetUserIDList(string UserID)
...{
string SqlStr = " select employee_id from u_emp_level where source_table = '1' and levelNo like '%'+( "+
" select ltrim(rtrim(levelNo)) from u_emp_level where employee_id = '"+UserID+"')+'%' ";
return ColumnToList(IPm.GetDateValue(SqlStr).Tables[0].Rows) ;
}
/**//// <summary>
/// 根据人员id获得该人员管辖的岗位的岗位分组id列表
/// </summary>
/// <param name="GroupID">人员id</param>
/// <returns>岗位id列表</returns>
public ArrayList GetGroupIDList(string UserID)
...{
string SqlStr = " select employee_id from u_emp_level where source_table = '0' and levelNo like '%'+( "+
" select ltrim(rtrim(levelNo)) from u_emp_level where employee_id = '"+UserID+"')+'%' ";
return ColumnToList(IPm.GetDateValue(SqlStr).Tables[0].Rows) ;
}
#endregion 方法
}
}
javascript代码 Employee.js
... {// levelNO为四位一组的字符串 如 0001 第一位是区分此节点为"组(0)"或"用户(1)" 后三位是相应的ID号
var ControlList = document.getElementById("userSelect");
if (ControlList.style.visibility == "hidden" )
...{
ControlList = document.getElementById("groupSelect");
var SelectType = "0"; // 成员的类型为 0 组
}
else
...{
ControlList = document.getElementById("userSelect");
var SelectType = "1"; // 成员的类型为 1 用户
}
var SelectNum = ControlList.selectedIndex;
if (( SelectNum == -1 )||( SelectNum == 0 ))
...{
return false
}
var SelectText = ControlList.options[SelectNum].text ;
var SelectValue = ControlList.options[SelectNum].value ;
// alert(SelectNum+";"+SelectText+";"+SelectValue)
ControlList.remove(SelectNum);
DataToTree(SelectText,SelectValue,SelectType)
}
function DataToTree(SelectText,SelectValue,SelectType)
... {
var ControlTree = document.getElementById("LevelTreeView");
var TreeNodeSelectNum = ControlTree.selectedNodeIndex ;
if ( TreeNodeSelectNum == -1 )
...{
return false
}
var TreeNodeData = FormatValue(SelectType,SelectValue);
var SelectNode = ControlTree.getTreeNode( TreeNodeSelectNum ) ;//得到被选节点对象
var SelectNodeData = SelectNode.getAttribute("NodeData"); //得到被选节点NODEDATA属性
var node=ControlTree.createTreeNode();
var CurrentTreeNodeData = SelectNodeData + TreeNodeData ;
//设置节点属性
node.setAttribute("Text",SelectText); //成员名称
node.setAttribute("ID","R"+SelectType+"T"+SelectValue); //成员ID 形式如 : R0T1 ; ID不可以数字开头.
node.setAttribute("Target",SelectType); //成员类型 组 用户
node.setAttribute("NodeData",CurrentTreeNodeData); //将节点标识符存入ID中.用它可以找到其父节点
node.setAttribute("Expanded","True");
SelectNode.add(node); //增加子节点
//ajaxpro插入数据库 InsertTreeDataToDB(string TableType,string curNodeValue,string curNodeText,string curlevelNo)
C21_MMC.Sys.employee.EmployeeView.InsertTreeDataToDB(SelectType,SelectValue,SelectText,CurrentTreeNodeData);
}
function FormatValue(Type,Value) // 将成员ID 格式化四位数据包 例如为 "1001","1011","1111"
... {
if ( Value.length == 1 )
...{
return Type+"00"+Value ;
}
if ( Value.length == 2 )
...{
return Type+"0"+Value ;
}
if ( Value.length == 3 )
...{
return Type+Value ;
}
}
function ToListBox()
... {
var ControlTree = document.getElementById("LevelTreeView");
var TreeNodeSelectNum = ControlTree.selectedNodeIndex ;
var SelectNode = ControlTree.getTreeNode( TreeNodeSelectNum ) ;//得到被选节点对象
var SelectNodeID = SelectNode.getAttribute("ID").split('T')[1]; //得到被选节点ID ;
var SelectNodeText = SelectNode.getAttribute("Text"); //得到被选节点Text ;
var SelectNodeType = SelectNode.getAttribute("Target"); //得到被选节点类型 用户or组 ;
var ChildrenNod = SelectNode.getChildren() ;
if ( ChildrenNod.length == 0 )
...{
//ajaxpro删除 public void DeleteTreeDataFromDB(string Employee_idStr,string SourceTableStr)
C21_MMC.Sys.employee.EmployeeView.DeleteTreeDataFromDB(SelectNodeID,SelectNodeType) ;
SelectNode.remove() ;
AddListData(SelectNodeText,SelectNodeID,SelectNodeType);
}
else
...{
alert("无法移动!请先移动子节点");
}
}
function AddListData(listText,listValue,SelectType)
... {
if ( SelectType == 1 )
...{
ListTypeStr = "userSelect" ;
}
if ( SelectType == 0 )
...{
ListTypeStr = "groupSelect" ;
}
var ControlList = document.getElementById(ListTypeStr);
if (( ControlList.style.visibility == "hidden" )&&( SelectType == 0 ))
...{
alert("无法将岗位移动到用户组中")
return false;
}
if (( ControlList.style.visibility == "hidden" )&&( SelectType == 1 ))
...{
alert("无法将用户移动到岗位组中")
return false;
}
var Opt = document.createElement("option");
Opt.text = listText;
Opt.value = listValue ;
ControlList.options.add(Opt)
//将从Treeview中移动的项目 调整到listbox的首位
var OptionLength = ControlList.options.length ;
var textStr = ControlList.options[OptionLength-1].text ;
var valueStr = ControlList.options[OptionLength-1].value ;
ControlList.options[1].text = textStr ;
ControlList.options[1].value = valueStr ;
}
function ShowUserListbox()
... {
var ControlListUser = document.getElementById("userSelect");
var ControlListGroup = document.getElementById("groupSelect");
if (ControlListUser.style.visibility == "hidden" )
...{
ControlListUser.style.visibility ="visible" ;
ControlListGroup.style.visibility = "hidden" ;
}
}
function ShowGroupListbox()
... {
var ControlListUser = document.getElementById("userSelect");
var ControlListGroup = document.getElementById("groupSelect");
if (ControlListGroup.style.visibility == "hidden")
...{
ControlListUser.style.visibility ="hidden" ;
ControlListGroup.style.visibility = "visible" ;
if ( ControlListGroup.style.left != ControlListUser.style.left )
...{
ControlListGroup.style.left = ControlListUser.style.left ;
}
}
}
数据库连接类部分代码 ProjectManageClass.cs
using System.Data;
using System.Data.OleDb;
using System.Xml;
using System.IO;
using System.Text;
namespace TestSelf..PM
... {
/**//// <summary>
/// Class1 的摘要说明。
/// </summary>
///
public interface IProjectManage
...{
DataSet GetDateValue(string sSQL);
int ExecuteData(string sqlstr);//无返回值的SQL语句
}
public class ProjectManage :IProjectManage
...{
private OleDbConnection Cnn;
private DataSet DS;
//private static string sConnstring;
private string sDataBase,sUserId,sServer,sPassWord;
/**//*public ProjectManage()
{
sConnstring=GetsCnnString();
Cnn=new OleDbConnection(sConnstring);
}*/
public ProjectManage(string server_name,string server_username,string server_password,string database_name)
...{
string scnn="Provider=SQLOLEDB.1;Persist Security Info=True;Connect Timeout=240;User ID="+server_username+";"
+"Initial Catalog="+database_name+";Data Source="+server_name+";Password="+server_password;
Cnn=new OleDbConnection(scnn);
}
/**//// <summary>
/// 设置获得连接字符串
/// </summary>
/**//* public static string ConString
{
get
{
return sConnstring;
}
set
{
sConnstring=value;
}
}*/
public int ExecuteData(string sqlstr)//无返回值的SQL语句
...{
Cnn.Open();
OleDbCommand cmd=new OleDbCommand(sqlstr,Cnn);
try
...{
return cmd.ExecuteNonQuery();
}
catch(Exception e)
...{
throw e;
}
finally
...{
Cnn.Close();
}
}
public DataSet GetDateValue(string sSQL)
...{
try
...{
Cnn.Open();
OleDbDataAdapter DA=new OleDbDataAdapter(sSQL,Cnn);
DS=new DataSet();
DA.Fill(DS);
}
catch(Exception e)
...{
DS=null;
throw e;
}
finally
...{
Cnn.Close();
}
return DS;
}
}
}