类Disk实现,它继承于接口IDisk,并实现了接口的所有方法。
类除了实现接口的所有方法之外,还定义了方法ShowDirectory(DropDownList dirList,int nParentID)和方法CreateChildNode(DropDownList dirList,DataTable
dataTable,int nParentID,string sParentName)。这两个方法实现按目录层次结果显示目录的信息。
实现上述功能的具体步骤如下:
(1)从数据库中获取所有目录信息,并使用DataTable对象dataTable保存获取的结果。
(2)添加根目录信息到控制dirList中。
(3)调用方法CreateChildNode(DropDownList dirList,DataTable dataTable,int nParentID,string sParentName)添加目录ID值为nParentID的所有子目录信息到控件dirList中
。
(4)重复步骤(3),直到所有目录都被添加到控件dirList中。
其中,步骤(1)~(3)由方法ShowDirectory(DropDownList dirList,int nParentID)实现。步骤(4)由方法CreateChildNode(DropDownList dirList,DataTable dataTable,int
nParentID,string sParentName)实现。
public void ShowDirectory(DropDownList dirList,int nParentID)
{
DataTable dataTable=SystemTools.ConvertDataReaderToDataTable(GetDirectorys());
dirList.Items.Clear(); //清空所有节点
DataRow[] rowList=dataTable.Select("ParentID='-1'");
if(rowList.Lenth<=0) return;
//创建.添加根节点
dirList.Items.Add(new ListItem("/",rowList[0]["DirID"].ToString()));
//创建其他节点
CreateChildNode(dirList,dataTable,Int32.Parse(rowList[0]["DirID"].ToString()),"/");
}
private void CreateChildNode(DropDownList dirList,DataTable dataTable,int nParentID,string sParentName)
{//选择数据时,添加了排序表达式OrderBy
DataRow[] rowList=dataTable.Select("ParentID='"+nParentID.ToString()+"'","CreateDate DESC");
foreach(DataRow row in rowList)
{
string sName=sParentName+row["Name"].ToString()+"/";
//创建新节点
dirList.Items.Add(new ListItem(sName,row["DirID"].ToString()));
//递归调用,创建其他节点
CreateChildNode(dirList,dataTable,Int32.Parse(row["DirID"].ToString()),sName);
}
}
由于接口的方法比较多,在此仅介绍添加文件的方法AddFile(string sName,int nParentID,int nContain,string sUrl,string sType)。该方法使用存储过程Pr_AddFile添加新
的文件到数据库中。该存储过程需要参数Name,ParentID,Contain,Url和Type,分别表示文件的名称,父目录ID,大小,链接地址和类型。
AddFile(string sName,int nParentID,int nContain,string sUrl,string sType)
{
SqlConnection myConnection =new SqlConnection(ConfigurationManager.ConnectionStrings
["SQLCONNECTIONSTRING"].ConnectionString);
SqlCommand myCommand=new SqlCommand("Pr_AddFile",myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
SqlParameter pName=new SqlParameter("@Name",SqlDbType.VarChar,200);
pName.Value=sName;
myCommand.Parameters.Add(pName);
SqlParameter pParentID=new SqlParameter("@ParentID",SqlDbType.Int,4);
pParentID.Value=nParentID;
myCommand.Parameters.Add(pParentID);
SqlParameter pContain=new SqlParameter("@Contain",SqlDbType.Int,4);
pContain.Value=nContain;
myCommand.Parameters.Add(pContain);
SqlParameter pUrl=new SqlParameter("@Url",SqlDbType.VarChar,255);
pUrl.Value=sUrl;
myCommand.Parameters.Add(pUrl);
SqlParameter pType=new SqlParameter("@Type",SqlDbType.VarChar,200);
pType.Value=sType;
myCommand.Parameters.Add(pType);
//定义返回值
int nResult=-1;
try
{
myConnection.Open();
nResult=myCommand.ExecuteNonQuery();
}
catch(SqlException ex)
{
throw new Exception(ex.Message,ex);
}
finally
{
myConnection.Close();
}
return nResult;
}