今儿跟大家伙儿聊聊我咋用oledbdatareader这个东西的,这玩意儿还真挺有意思的,一开始还真把我给整懵。
起初,我这不是有个项目嘛需要从一个access数据库里头捞数据。你们知道的,就喜欢捣鼓这些东西。以前也没咋接触过oledbdatareader,听这名字还挺唬人的,以为是啥高大上的东西。
先来说说我是咋连上数据库的。
我就在网上搜搜,想看看这玩意儿到底咋用。网上那些文章,你们也懂的,说得一套一套的,什么“对象链接嵌入数据库”,什么“只读,笔直向前”,看得我脑袋都大。我就寻思,有没有啥简单粗暴点的方法?后来发现,要用这玩意儿,得整个oledbconnection,用它来建立数据源连接,说白就是搭个桥,把我的程序和数据库连起来。
这还不算完,还得整个oledbcommand,用来执行数据库命令,你可以理解成,我要从数据库里头拿啥数据,都得靠它。当然也可以用它来操作数据库,增删改查都可以搞定。
才是oledbdatareader,这玩意儿才是真正去数据库里头捞数据的。我看着网上那些代码示例,照葫芦画瓢,还真把数据库给连上。
- 第一步,我先弄个oledbconnection,把连接字符串给填上,这字符串里头包含数据库的路径啥的,就像个门牌号一样,告诉程序数据库在哪儿。
- 第二步,我又弄个oledbcommand,把sql查询语句写进去,就是告诉数据库我要查啥数据。
就是咋用oledbdatareader把数据捞出来。
连上数据库之后,我就开始琢磨咋把数据捞出来。这oledbdatareader,它就像一个只进不退的箭头,你调用一次read()方法,它就往前走一条记录,想要回头看之前的数据都看不。而且这家伙还挺霸道的,必须单独占用一个打开的数据库连接,用完后必须关闭数据库连接,不然会报错。
我一开始没注意,直接就用oledbcommand的executereader()方法,把oledbdatareader给弄出来。然后,我就用一个while循环,每次循环都调用一下read()方法,这样就能一条一条地把数据给读出来。读出来的数据,可以用oledbdatareader的各种方法,比如getstring()、getint32()啥的,根据字段的类型,选择合适的方法就行。这些字段的类型在建立数据库表格的时候就定义好,必须使用定义好的类型来取值,不然就会报错。
这中间还遇到一些坑。
我以为这玩意儿挺简单的,结果还是遇到不少坑。比如说,有一次,我明明数据库里头有数据,可就是读不出来,一直读的是空值。后来才发现,原来是我sql语句写错,这个不报错就离谱,找问题好麻烦,少写一个字母,找半天才找出来。还有一次,程序运行着运行着就卡住,半天没反应。我查半天,才发现是有一个数据库连接没关,结果把资源给占满。这个就更离谱,我每次都是*()的,结果还是会出现连接没有关闭的情况,我只能用using语句来确保每次都能关闭。用这玩意儿,一定要细心,不然很容易掉坑里。
最开始我用的一个旧电脑,配置不怎么然后每次用这个玩意的时候,这个程序都会卡住,要好几分钟才会有响应,我都怀疑是不是哪里有问题