C#基础视频教程6.1 如何简单读写数据库

要理解MySQL,SQLServer,ACCESS都是数据库的品牌,不同品牌的数据库在不同的领域,适用场合有所不同。ACCESS应该是最简单,至少是Windows上最容易上手的数据库,MySQL可能跟PHP搭配在做网站的时候用的比较多,SQLServer跟ASP.NET搭配做服务器。由于ACCESS有很多版本,我们为了兼容之前的版本,尽量使用ACCESS2003的数据库(MDB格式,往后的版本可能是ACCDB的格式),比如我安装的是ACCESS2010,首先在选项中修改默认的空白数据库格式为2003的

ACCESS2010下载(Office2010自带了) :链接:http://pan.baidu.com/s/1o7Tjp3O 密码:6wxi

 

然后文件-新建-空数据库,默认是表1,并且里面是空的

 

右击表1,切换到设计视图,然后修改字段名称,数据类型和备注(第一个ID前面有一把钥匙,这个是数据库的主键,就是说数据库的每一条记录为了唯一区分开来,都需要一个唯一的ID,如同每个人都可以有相同的名字,性别,但是要有唯一的身份证号码区分开来,否则双胞胎就没法区分了。也可以取消ID的主键,自己设置其他属性为主键,甚至某些特殊的数据库不需要主键,但是这里先不做探讨)

 

每一个字段对应的数据类型也可以很复杂,但是初学者也暂时不考虑节省存储空间,编码格式,溢出等问题,都按照默认即可

 

双击表1,然后随便输入几条测试信息(注意在前面我们已经定义了ProductCount是数字,如果输入非法数值会提示)

 

创建最简单的读取数据库程序(只需要注意数据库的实际位置,要选择的表名称)

 

最简单的显示数据库的方法是放到一个DataGridView里面,点击button1确实把数据库的东西都弄出来了

 

为了更加简化操作,也可以点开服务器资源管理器,然后数据连接,添加连接,选择数据源,继续,只要选中数据库的文件路径即可(测试连接确认通过)

 

然后右击这个数据库,属性,复制连接字符串就可以了(作为代码部分的连接使用)

 

如果要用C#连接带密码的数据库,则需要在额外添加一行(这个微软没有做好,你跟上面一样复制字符串没什么用)

 

注意在执行任何SQL命令之前首先要关闭数据库(ACCESS软件也关了),初学者还是需要把命令放在try catch语句里面,方便知道自己哪里有问题

 

首先把数据库的连接对象做成全局的,只在Form加载的时候执行一次(下面一节我们会把这些封装成类库,做的更加标准,为了测试方便暂时先不管)

 

仅仅连接是不够的,数据库一共有四项操作:增/查/删/改,先来看查询语句,因为我们在前面定义数据库的时候,就自己定义了字段,所以查询的时候可以按ID,产品名称,产品数量等等查询,注意查询的内容如果是数字不需要加单引号,如果不是就要加(可以仔细分析下面两句话),这个Select XXX from XXX where XXX=XXX是SQL的标准语法(不管你用什么品牌的数据库,用什么语言编程,这个语句都是标准的,在真实的SQL语句中不可能这么简单一句话,比如你淘宝搜东西,会按价格排序,再价格排序的基础上找到信用最好的,再在信用最好的里面优先显示曾经买过的或者黄钻买家经常买的,所以多层的SQL语句的嵌套,模糊查询,让SQL语句更加精简高效等等也是一门很深的学问,在这里我不做探讨)

Select * from 表1 where ID=2

Select * from 表1 where ProductName='苹果'

 

我们暂时只需要掌握如何把查询结果正确的显示出来(还是跟数据库定义字段的时候一致),以及如果查不到结果,还有SQL语句组织错误的时候给与显示,为了更加有条理的跟数据库对应字段匹配,可能我们更应该把变量做到一个结构体里。

 

再来看新增指令,ACCESS数据库不需要我们新增主键的ID,他会自动增加并且保证不重复,每次插入一条记录的时候,只需要其他字段对应就可以(可以打开ACCESS数据库刷新看效果,不要切换到设计视图就可以)

INSERT INTO 表1(ProductName,ProductCount,ProductSource,ProductPlace) VALUES ('XXX','123','XXX','XXX');

 

读者可以测试一下插入一条新的数据的时候,故意给非法值的情况,比如产品数量是数字类型,给一个ABC(try catch会给出提示,但是实际上如果做得比较严谨,还是不应该到执行SQL失败了以后才报错,因为try catch会浪费大量资源,我们应该在插入之前就把每一个字段是否有问题检查好,不行就根本不应该打开数据库,执行这条命令)

 

再来看删除,如果根据ID删除一定是一条记录,如果根据其他属性,可能删除的有多条记录(同样数据库会有显示,刷新之后就没了)

delete * from 表1 where ID=29

delete * from 表1 where ProductName='XXX'

 

最后看更新记录,其实跟前面的语句也非常相似了(这里为了方便起见还是以ID为依据进行修改,其实很多时候比如物料仓库系统,我们总是先根据物料编号或者物料名称查询得到一个结果,这个结果可能包含了不止一条记录都列出来,然后在众多记录中找到我们要的记录,点击更新之后再定位到显示出来的那条记录的ID去,ID是不需要显示的,但是ID却始终是增查删改的依据)

UPDATE 表1 SET ProductName='YYY',ProductCount='111',ProductSource='ZZZ',ProductPlace='WWW' where id=34

 

最后我们再回过头来看一下如何从DataGridView直接跟ACCESS数据库对接,需要注意的是实际上真的直接这样做的并不多见,因为大部分涉及到数据的应用都会有几百万条以上的数据,你不可能直接把所有东西都显示到一个WinForm的控件上,也不可能WinForm更新了一笔数据,就要把整个数据库折腾一次。更何况从控件到内容,数据库的输入不允许非法字符(引号之类的),这些问题的专业处理都是要考虑的,我们用ACCESS小型数据库搭建一个测试环境,纯粹学习的角度没有问题。

 

在读取ACCESS数据库中,我列举了两种方法,简单的几行搞定,复杂的没有使用微软提供的OleDbDataAdapter类,但是两者都是要把ACCESS数据库的内容誊写到DT表上,然后设置数据源就完了

 

还有删除记录和更新记录,也都可以用比较傻瓜的方法实现(删除的时候先删除控件的,再从DataTable更新SDA),删除的本质在这里还是更新

 

直接绑定数据的问题:输入非法值的报错

 

直接绑定数据的问题:主键也可以被修改,但是没有更新到真实的数据库(理论上不应该允许编辑ID这一列,而且即便不允许编辑,仍然无法保证自动生成的序号数据库一定不存在,这里我改成一样之后点更新不会报错,但是实际也不会执行,就不受控制了,可以点遍历数据库再恢复默认)

 

还有一些别的问题可以研究,比如在控件上直接添加数据库的绑定(点开控件的小三角,然后添加项目数据源,点击下一步)

 

选择一个数据库,然后新建连接,点击下一步,绑定到已有的数据库(这样这个数据库会复制到项目文件夹下,而且初始化的时候会自动更新到控件dataGridView,但是傻瓜也有傻瓜的缺点,他会自动生成一些代码和控件,你的整个程序更加不受控了,而且这种绑定之后也不能完全实现ACCESS到DataGridView的完美链接,要想做的好必须自己封装类库,让功能符合自己的需求,下一节我们会尝试做数据库读写类的封装)

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

原文地址:https://www.cnblogs.com/acetaohai123/p/7586698.html