要理解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

 

 

C#基础视频教程6.1 如何简单读写数据库的更多相关文章

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

    在继续往下做之前,我们需要把之前的代码尽可能的精简(会对后面很有好处,而且读者也应该仔细比对这一部分的代码和上一部分哪里真正得到了优化,从而提高编程水平). 首先数据库的操作类有哪些是可以做的更加普遍 ...

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

    上一节我们简单介绍了数据库的读写,所使用的数据库都是随便写的(用水果代替,但不是真正的食品零售数据表,至少没有价格,销量等等).这一节我们思考如何实现一个测试题的数据库,所谓的测试题数据库就是假定系统 ...

  3. C#基础视频教程5.3 如何编写简单的超级热键

    跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去   然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应 ...

  4. JavaScript基础视频教程总结(131-140章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. JavaScript基础视频教程总结(081-090章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  6. JavaScript基础视频教程总结(001-010章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  7. JavaScript基础视频教程总结(011-020章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步

    Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述     PV操作是对信号量进行的操作.     进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...

  9. python3基础视频教程

    随着目前Python行业的薪资水平越来越高,很多人想加入该行业拿高薪.有没有想通过视频教程入门的同学们?这份Python教程全集等你来学习啦! python3基础视频教程:http://pan.bai ...

随机推荐

  1. Redis学习篇(十)之排序

    SORT 按照键值从小到大或者从大到小的顺序进行排序 对数字进行排序 语法:SORT key [DESC] 默认情况下,是升序排序,可以指定DESC进行降序排序 对字母进行排序 语法:SORT key ...

  2. [Codeforces #514] Tutorial

    Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题 ...

  3. 【最大化平均值】POJ3111-K Best

    [题目大意] 给出v[]和w[],求的最大值. [思路] 二分s(S)的值,可变形为s(S)*Σw>=Σv,所以只需要把求出x*w[i]-v[i],看看前k个的和是否大于等于0,大于等于0就满足 ...

  4. 【期望DP】BZOJ3450- Tyvj1952 Easy

    ---恢复内容开始--- [题目大意] 有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有a*a分,comb就是极大的连续o.求期望分数. [思路] 比之前的OS ...

  5. hdu 4918

    第一道树的点分治. 感谢: http://blog.csdn.net/u013368721/article/details/40887575 首先,找出原图的重心(最大子树大小最小的点(如果作为根)) ...

  6. bzoj1954 The xor-longest path

    Description  给定一棵n个点的带权树,求树上最长的异或和路径 Input The input contains several test cases. The first line of ...

  7. 常用 iOS 开源库和第三方组件

    1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICKeyChainStore 存放用 ...

  8. Vue.js插件开发

    Vue.js插件是为应用添加全局功能的一种强大而且简单的方式.插件的用途很广泛,从全局组件,到为应用添加一些额外的功能.如路由(Vue Router),存储在应用程序里的不可变数据(Vuex). 一般 ...

  9. mysql知识点(三)

    1.表关联是可以利用两个表的索引的,如果是用子查询,至少第二次查询是没有办法使用索引的. 2.  为了给主查询提供数据而首先执行的查询被叫做子查询 3.如果WHERE子句的查询条件里使用了函数(WHE ...

  10. LaTeX绘图宏包 Pgfplots package

    Pgfplots package The pgfplots package is a powerful tool, based on tikz, dedicated to create scienti ...