C#数据库的使用
2016-12-23 13:09
99 查看
使用背景:最近做网络应用编程的期末实验,很抽风地做了一个什么图书馆管理系统。。。听人说,出去实习找工作千万千万不要说你做过图书馆管理系统,因为它不仅不能给你加分,反而还会扣分。。也是呵呵了,已经做成差不多了,又是期末实在不想改,拿别人的过来终究觉得心里愧疚。。。(况且老师提问里面的关键代码怎么办?好尴尬)额,这是本博客的写作背景,不喜欢的可以忽略了。
简要介绍一下我们的系统(主要是数据库方面的)
数据库我们采用的是VS2015自带的SQL Sever,其实VS可以采用数据库模型的方式,使用数据库实例之类的方式直接对数据库操作,(貌似很方便?)但是我们没有这样,我们采用的是通过连接字符串,编写专门的操作数据库类(里面写有多个操作数据库数据的方法),这种方法其实是在项目开发中比较常用的数据库方法,Java项目也都是这样用的,所以我把关键的记下了,以备不时之需。
先提前说一下关于数据库中表的命名。本来表名其实是应该比较随意的,但实际上有一个很重要的问题,就是避开SQL Sever中的关键字。比如admin,user,如果你很不幸把表名设置成关键字,那么sql语句再写怎么正确,还是会报错的。报错信息为:错误:Incorrect syntax near the keyword ‘user’,uer是保留字,改为[user]即可,不过方便起见,建议用其他的单词代替。
下面是我的数据库类的部分方法。
循环查询和执行
特别的一个地方:
另外,在还书(也可能有其他类似的情况),处理借书记录的时候,应该以用户id,图书编号还有借书时间作为删除条件,借书时间这个很必要,因为一个用户可能借到多本相同书名的图书,而借书时间算是一个很唯一的标准(具体到借书的时分秒),所以要注意一下。
简要介绍一下我们的系统(主要是数据库方面的)
数据库我们采用的是VS2015自带的SQL Sever,其实VS可以采用数据库模型的方式,使用数据库实例之类的方式直接对数据库操作,(貌似很方便?)但是我们没有这样,我们采用的是通过连接字符串,编写专门的操作数据库类(里面写有多个操作数据库数据的方法),这种方法其实是在项目开发中比较常用的数据库方法,Java项目也都是这样用的,所以我把关键的记下了,以备不时之需。
先提前说一下关于数据库中表的命名。本来表名其实是应该比较随意的,但实际上有一个很重要的问题,就是避开SQL Sever中的关键字。比如admin,user,如果你很不幸把表名设置成关键字,那么sql语句再写怎么正确,还是会报错的。报错信息为:错误:Incorrect syntax near the keyword ‘user’,uer是保留字,改为[user]即可,不过方便起见,建议用其他的单词代替。
下面是我的数据库类的部分方法。
using System.Data.SqlClient; //返回数据库连接 public SqlConnection ConnectDataBase() { //设置连接字符串:双击已经连接的mdf文件,在右下角属性可以看到连接字符串,复制粘贴过来即可。 SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\qingyue\Desktop\Library\bookmanage.mdf;Integrated Security=True;Connect Timeout=30"); return conn; }
循环查询和执行
//用户注册方法 public bool user_register(UserInfo user) { bool flag; try { SqlConnection conn = ConnectDataBase(); //打开数据库 conn.Open(); //创建查询语句 string sql = "insert into consumer(studentid,username,password,sname,sex,cid,faculty,profession) values(N" + "'" + user.Studentid + "','" + user.Username + "','" + user.Password + "','" + user.Sname + "','" + user.Sex + "','" + user.Cid + "','" + user.Faculty + "','" + user.Profession + "')"; SqlCommand cmd = new SqlCommand(sql, conn); int result = cmd.ExecuteNonQuery(); conn.Close(); flag = true; } catch(SqlException e) { flag = false; } return flag; } //返回用户信息 public UserInfo user_info(int uid) { SqlConnection conn = ConnectDataBase(); //打开数据库 UserInfo user = new UserInfo(); conn.Open(); SqlCommand querySingleInfo = conn.CreateCommand(); querySingleInfo.CommandText = "SELECT * FROM consumer"; SqlDataReader singleInfoReader = querySingleInfo.ExecuteReader(); //有多行数据,用while循环 while (singleInfoReader.Read()) { if (uid==(int)singleInfoReader["uid"]) { user.Studentid = singleInfoReader["studentid"].ToString(); user.Sname = singleInfoReader["sname"].ToString(); user.Profession = singleInfoReader["profession"].ToString(); user.Cid = (int)singleInfoReader["cid"]; user.Faculty = singleInfoReader["faculty"].ToString(); user.Sex = (int)singleInfoReader["sex"]; return user; } } return user; }
特别的一个地方:
//查询所有图书。 while (singleInfoReader.Read()) { BookInfo bookinfo = new BookInfo();//必须放在这里,这样每次都有一个新的bookinfo对象添加进列表,确保所有对象都加入list,如果放在循环外,最终只能添加一条记录到list里面。 bookinfo.Booknum = singleInfoReader["booknum"].ToString(); bookinfo.Bookname = singleInfoReader["bookname"].ToString(); bookinfo.Author = singleInfoReader["author"].ToString(); bookinfo.Totlenum = (int)singleInfoReader["totalnum"]; bookinfo.Publish = singleInfoReader["publish"].ToString(); bookinfo.Lendnum = (int)singleInfoReader["lendnum"]; booklist.Add(bookinfo); }
另外,在还书(也可能有其他类似的情况),处理借书记录的时候,应该以用户id,图书编号还有借书时间作为删除条件,借书时间这个很必要,因为一个用户可能借到多本相同书名的图书,而借书时间算是一个很唯一的标准(具体到借书的时分秒),所以要注意一下。
相关文章推荐
- 使用 JDBC 创建数据库对象 1
- 使用OLEDB编写数据库应用程序
- 使用ADO.NET访问数据库
- 如何使用ANT自动进行数据库的相关操作
- 使用组件封装数据库操作(二)
- 使用Oracle9i的新特征-停顿(QUIESCING)数据库
- Oracle 数据库 系统使用经验六则
- 更新、插入数据库所使用的UPDATE()
- 学习使用数据库MySQL
- 使用ADO编写数据库应用程序
- 使用数据库保存session的方法
- PHP面向对象的使用教程 简单数据库连接
- 使用Visual Basic访问数据库几个注意的问题
- 关于如何使用ADO连接数据库
- 使用ODBCAPI编写数据库应用程序
- 在C++Builder 5中使用ADO数据库编程
- 在DELPHI程序中使用ADO对象存取ODBC数据库
- 使用SQL-DMO备份数据库并进行校验
- 使用组件封装数据库操作(一)
- 如何使用C#创建一个三层的数据库应用程序