仍然是沟通窗体与数据库桥梁的一种表现形式。以前做的都是一次性添加一条记录这次需要的是一次性将所有记录都加进去刚拿到手觉得真的很困难明明知道是坑也还会往进跳没办法啊。后来经过不断查资料了解写出来个大概。要实现这个过程需要四大模块
⑴实体类。个中包括文件的属性字段也就是数据库中对应的表的列名和这些字段的属性。这个类主要用来剥离应用程序和数据库之间的关系有了这个实体类就可以各自进行各自的操作互不影响。
⑵DBHlper类。这是一个通用数据库访问类是一个功能类一个数据库操作类里面通常包含的是连接数据库的方法。在项目过程中只要我们有这个类并且调用这个类里的方法就可以想实现数据库访问这个功能。但是并不包含具体的数据操作方式只是说拥有这个类就架起了程序与数据库的桥梁这个DBHelper类仅仅负责将特定的SQL语句丢进数据库。
⑶数据访问类。这是一个特定实体类的数据访问类专门指定要对数据库进行具体的操作的一个类主要是发布SQL语句将SQL语句丢给DBHelper类然后再经过这个‘帮助’类丢进数据库从而对数据库库进行一系列操作诸如插入删除更新等等
⑷表示层类。用来向用户展示数据也就是Windows界面。这个比较容易比较不容易的是上面几个类。
下面做的就是一个目录的所有子文件和所有子目录包含的孙子文件的几个属性一次性都插入到数据库中的一张特定的表里。看看代码
实体类比较容易就不写了。看看另外两个特殊的类
通用数据访问类
public class DBhelper{//连接字符串。表示内容是要连接的数据库和连接所需要的内容public string connString "server(local);databaseAllFilesDB;uidsa;pwd514420;";/// /// 采取自动打开的方式得到一张数据表/// /// /// /// DataTable dtpublic DataTable getTable(string sql, SqlParameter[] ps){SqlConnection connection new SqlConnection(connString);SqlCommand command connection.CreateCommand();command.CommandText sql;command.Parameters.AddRange(ps);//在连接好数据库并且将参数传进去后利用DataTable类填充数据表DataTable dt new DataTable();SqlDataAdapter sda new SqlDataAdapter(command);sda.Fill(dt);return dt;}}
数据访问类
public class FileService{//向数据库中添加数据public void AddFileInfos(CardFile cf){//具体要对数据库进行的操作插入string sql "Insert into AllFiles(fileName, fileDirectory, IsDirectory) values(fileName, fileDirectory, IsDirectory)";SqlParameter[] ps new SqlParameter[]{new SqlParameter("fileName",cf.FileName),new SqlParameter("fileDirectory",cf.FileDirectory),new SqlParameter("IsDirectory",cf.IsDirectory1),};//DBhelper里面的方法都不是被声明为类方法是对象方法所以西药创建对象才能调用其中的方法DBhelper db new DBhelper();db.getTable(sql, ps);}}
表示层类
public partial class Form1 : Form{public Form1(){//初始化InitializeComponent();}private void btnBrowers_Click(object sender, EventArgs e){//提示用户选择文件夹的路径的对话框FolderBrowserDialog obd new FolderBrowserDialog();//显示对话框后结果有两个确定和取消DialogResult dr obd.ShowDialog();//如果返回的是取消那么一定意味着用户点了取消按钮if (drDialogResult.Cancel){return;}//能走到这儿一定是意味着用户点了确定按钮那么久进一步选择路径string path obd.SelectedPath;//将选择好的路径填进文本框this.txtFilePath.Text path;}/// /// 显示文件属性的一个功能函数/// /// private static void ShowDirectoryInfo(string path){FileService fs new FileService();DirectoryInfo di new DirectoryInfo(path);//得到根目录的所有子目录多个子目录构成一个集合DirectoryInfo[] dis di.GetDirectories();//得到根目录的所有子文件多个子文件构成一个集合FileInfo[] fis di.GetFiles();foreach (DirectoryInfo temp in dis){//将目录的属性的值作为一个CardFile对象添加到数据库中CardFile cf new CardFile();//将该目录的名字赋给对象的名字属性cf.FileName temp.Name;cf.FileDirectory temp.Parent.Name;cf.IsDirectory1 true;ShowDirectoryInfo(temp.FullName);fs.AddFileInfos(cf);}foreach (FileInfo temp in fis){//将文件的属性的值作为一个CardFile对象添加到数据库中CardFile cf new CardFile();//将该文件的名字赋给对象的名字属性cf.FileName temp.Name;cf.FileDirectory temp.Directory.Name;cf.IsDirectory1 false;fs.AddFileInfos(cf);}}//设置‘添加’按钮的功能private void btnAdd_Click(object sender, EventArgs e){string path this.txtFilePath.Text;ShowDirectoryInfo(path);}}}
最后就是要做一个符合要求的简单的窗口了。这个比较容易。
后续不断的努力后续不断的进步我在成长。。
Ajax的姑娘加油
转载于:https://blog.51cto.com/broncho/1301219
【文章原创作者:韩国高防服务器 http://www.558idc.com/krgf.html 网络转载请说明出处】