在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前不久在笔记本上装了VS2008,使用其顺带的SQL SERVER2005来学习.NET下的数据库操作,但是笔记本好久不用,键盘已经坏了,好几个键没反应了,于是昨天又跑出去花了80块钱给笔记本换了个新键盘,今天好歹弄了一个数据库查询的东西出来。 要在.NET下操作数据库,通常是使用一个叫ADO.NET的相关类集合。基本结构,概念略过不记。下面是一个实例程序,在ASP.NET中的一个页面的Page_Load()方法中进行了数据库的连接查询,然后将查询结果反映在了页面上。 代码如下:
当然首先要保证的是,得要先有一个如上所用的叫mytestdb的数据库存在,并且数据库中要建好一个名为MyTestTable的表。
并且要注意那个connection string,其中server为服务器名,SqlServer企业版为“(local)”;SqlServerExpress为“./sqlexpress”, database为数据库实例名; 我刚开始先用书上介绍的 Data Source=localhost; 连接失败了,然后网上查了下,按上面的连接字符串才可以正常运行。 还要注意当用SqlDataReader读出来内容时,取某行中的某列,这个列号是从0开始编号的,秉承了数组传统,呵呵。 然后还要注意SqlDataReader对象在使用完毕后也要close(),SqlConnection对象也是。
DataReader对DB表的查询结果,只能以单向前进,每次一条记录的方式进行,简单直接有效,类似于游标。DataReader有一个FieldCount属性值,存放了本次查询得到的结果集的列数。有一个GetName()方法,可以以列编号为参数得到该列的名字,当然要注意列编号是从0开始的。 需要注意的一点是,DataReader的几个取列值的方法:GetInt32(),GetChar(),GetDateTime(),GetString(),都不能直接处理空值,当取到的值为NULL时,即使你使用了与列数据类型相符的.NET数据类型,也会出现异常,因此,如果表中的某列可能包含NULL值,就要先通过GetValue()方法取得其值,然后比较是否跟常量DBNull.value相等,然后再将其转换为正确的数据类型来使用。示例如下:
int? Age; if(reader["Age"]==DBNull.Value) Age=null; else Age=(int?)reader["Age"];
还好.NET设计了一个可空类型,要不然这种情况还真不方便处理。
另外今天我还复习了数据库中的事务(Transaction)这个概念,并学习了如何在ADO.NET中执行事务处理。书上有这样的一个忠告: 尽量在存储过程中使用事务,少用ADO.NET事务。这样,事务就可以被更快地启动和编译,因为数据库服务器不需要与客户端交互。
其实上面的直接在页面方法中连接数据库进行查询不是好的编码设计方式,好的方式应该是把表数据进行类封装,把访问方法也进行类封装,然后在使用的时候进行调用。 在SQL SERVER中使用存储过程有一个小注意点是:不要使用sp_XXXX来命名,因为SQL Server将首先查找系统存储过程,这样导致效率低下。并且有文章说SQL SERVER中的存储过程命名必须都以proc为前缀(???)。。。。。。
前面的DB操作都是建立在客户端保持与DB的连接的基础上。ADO.NET还提供了使用DataSet来进行非连接的DB操作的功能。 |
请发表评论