学习数据库与WinForm应用程序的过程中,我们就是要让应用程序和数据库能紧密的结合起来,方便我们的数据传输,下面我们就来看一看怎么将文件的属性通过应用程序传输到数据库中去。
在往数据库中添加东西的时候,我们先要准备一个数据库,并且在其中添加一张表,下来就是要考虑怎么样往数据库中放东西了,这个过程这里我们要让应用程序来完成。
1.先建一个实体类:存放表中的具体列的信息。用来剥离应用程序和数据库之间的关系。
2.再创建一个DBHelper(数据库操作类):通用数据库访问类,当调用这个类中的方法时,就可以访问数据库,只有通过这个类才能和数据库沟通,但这个类中并不包含在数据库中进行怎样的操作(这个类在数据库与应用程序连接时都能用,需做部分改动)。
3.最后创建一个数据访问类:特定实体类(表)的数据访问类。执行增加、修改、删除的方法,还有执行查询的方法。通过调用DBHelper类,进行数据库操作。
现在来看看具体的程序:
实体类:
//设置成公开的类 public class fileInfo { int id; public int Id { get { return id; } set { id = value; } } string fileName; public string FileName { get { return fileName; } set { fileName = value; } } string fileDirectory; public string FileDirectory { get { return fileDirectory; } set { fileDirectory = value; } } bool isDirectory; public bool IsDirectory { get { return isDirectory; } set { isDirectory = value; } } DateTime createtime; public DateTime Createtime { get { return createtime; } set { createtime = value; } } int fileLength; public int FileLength { get { return fileLength; } set { fileLength = value; } } }
数据库操作类:
public class DBHelper { //连接到某个指定数据库的连接字符串 public string connString = "server=.\\sqlexpress;uid=sa;pwd=199298;database=FileInfosDB"; //连接到具体的数据库 public int ExecueNonQuery(string sql,SqlParameter[]ps) { //创建一个SqlConnection类的对象,通过连接字符串连接到数据库 SqlConnection conn = new SqlConnection(connString); //用conn创建一个SqlCommand类的对象cmd SqlCommand cmd = conn.CreateCommand(); //将要执行的SQL语句给Command对象 cmd.CommandText = sql; cmd.Parameters.AddRange(ps); conn.Open(); //执行SQL语句:将SQL语句发往数据库中去执行,只添加,不查询 int x = cmd.ExecuteNonQuery(); conn.Close(); return x; } }
数据访问类:
/// <summary> /// 数据访问类 /// </summary> public class fileService { //往数据库中添加数据 public int AddFileInfos(fileInfo fi) { //要执行的SQL语句 string sql = "Insert Into fileInfos(fileName, fileDirectory, isDirectory, createtime, fileLength)Values(@fileName,@fileDirectory,@isDirectory,@createtime,@fileLength)"; SqlParameter[] ps = new SqlParameter[] { new SqlParameter("@fileName",fi.FileName), new SqlParameter("@fileDirectory",fi.FileDirectory), new SqlParameter("@isDirectory",fi.IsDirectory), new SqlParameter("@createtime",fi.Createtime), new SqlParameter("@fileLength",fi.FileLength) }; //创建一个DBHelper对象 DBHelper db = new DBHelper(); //调用DBHelper中的ExecueNonQuery()方法,执行SQL语句 int x=db.ExecueNonQuery(sql,ps); return x; } }
最后我们应用Windows窗体,在界面中设置几个控件,通过浏览、添加将数据添加到数据库中:在这个Windows窗体对应的程序中我们要调用前面那几个类中的方法,将文件和目录的属性添加到数据库中:
看着两个按钮的Click时间:
//浏览按钮的Click事件 private void btnBrower_Click(object sender, EventArgs e) { //创建一个FolderBrowserDialog类的对象,提示用户选择文件夹路径 FolderBrowserDialog fbd = new FolderBrowserDialog(); //显示一个模态窗体,有两个返回值,确定或取消 DialogResult dr=fbd.ShowDialog(); //当模态窗体的返回值为取消时,就返回继续点击浏览或结束 if (dr==DialogResult.Cancel) { return; } //能走到这一步,说明模态窗体的返回值为确定,那我们就可以得到一个路径了,并将这个路径的值给我们设置的文本框 string path = fbd.SelectedPath; this.txtPath.Text = path; } //添加按钮的Click事件 private void btnAdd_Click(object sender, EventArgs e) { //定义路径为文本框中的值,调用 ShowDirectory()函数,得到文件夹中的目录和文件的属性并将数据添加到数据库中去。 string path = this.txtPath.Text; ShowDirectory(path); } //显示目录和其中文件的信息 private void ShowDirectory(string path) { //创建一个fileService对象 fileService fs = new fileService(); //创建一个DirectoryInfo对象,将路径传进去 DirectoryInfo di = new DirectoryInfo(path); //利用di中的GetDirectories()得到一个目录数组 DirectoryInfo[] dis = di.GetDirectories(); //利用di中的GetFiles()得到一个文件数组 FileInfo[] fis = di.GetFiles(); //遍历dis中的所有数据 foreach (DirectoryInfo temp in dis) { //创建一个fileInfo对象 fileInfo fi = new fileInfo(); //将遍历出来的数据的属性值分别赋给fileInfo对象中的对应字段 fi.FileName = temp.Name; fi.FileDirectory = temp.Parent.Name; fi.IsDirectory = true; fi.Createtime = temp.CreationTime; fi.FileLength = 0; //用fs中的AddFileInfos()方法将得到的实例化后的实体类的对象添加到数据库中去 fs.AddFileInfos(fi); //调用ShowDirectory()函数,得到目录中子目录和文件的属性 ShowDirectory(temp.FullName); } //遍历fis中的所有数据 foreach (FileInfo temp in fis) { //创建一个fileInfo对象 fileInfo fi = new fileInfo(); //将遍历出来的数据的属性值分别赋给fileInfo对象中的对应字段 fi.FileName = temp.Name; fi.FileDirectory = temp.Directory.Name; fi.IsDirectory = false; fi.Createtime = temp.CreationTime; fi.FileLength = (int)temp.Length; //用fs中的AddFileInfos()方法将得到的实例化后的实体类的对象添加到数据库中去 fs.AddFileInfos(fi); } }