• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET数据库交互基础

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前不久在笔记本上装了VS2008,使用其顺带的SQL SERVER2005来学习.NET下的数据库操作,但是笔记本好久不用,键盘已经坏了,好几个键没反应了,于是昨天又跑出去花了80块钱给笔记本换了个新键盘,今天好歹弄了一个数据库查询的东西出来。

要在.NET下操作数据库,通常是使用一个叫ADO.NET的相关类集合。基本结构,概念略过不记。下面是一个实例程序,在ASP.NET中的一个页面的Page_Load()方法中进行了数据库的连接查询,然后将查询结果反映在了页面上。

代码如下:

 

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string ConnectString=
            @"
server=.\sqlexpress;integrated security=SSPI;database=mytestdb";
SqlConnection con
= new SqlConnection(ConnectString);
try
{
con.Open();
lbInfo.Text
= "<b>Server Version : </b>" + con.ServerVersion;
lbInfo.Text
+= "<br/><b>Connection is : </b>" + con.State.ToString();
string sql = "SELECT * FROM MyTestTable";
SqlCommand cmd
= new SqlCommand(sql, con);
SqlDataReader reader
= cmd.ExecuteReader();
while (reader.Read())
{
QueryResult.Text
+= reader.GetString(0) + reader.GetString(1)
               
+ "\n" +
reader.GetInt32(
2).ToString() + "\n" + reader.GetString(3);
}
reader.Close();
}
catch (Exception err)
{
lbInfo.Text
= "Error reading the database : " + err.Message;
}
finally
{
con.Close();
}
}
}

当然首先要保证的是,得要先有一个如上所用的叫mytestdb的数据库存在,并且数据库中要建好一个名为MyTestTable的表。

 

并且要注意那个connection string,其中server为服务器名,SqlServer企业版为“(local)”;SqlServerExpress为“./sqlexpress”,
integrated security=SSPI为使用Window身份验证,

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操作的功能。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap