最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > asp教程

ASP.NET中的数据库操作变得简单

日期:11-20    来源:网页设计秀    作者:cnwebshow.com

作者:WillmoveS9v中国设计秀
主页:http://www.amuhouse.comS9v中国设计秀
E-mail: willmove@Gmail.comS9v中国设计秀
声明:系作者原创作品,转载请注明出处。S9v中国设计秀

asp.net中一般都是使用SQL Server作为后台数据库。一般的ASP.NET数据库操作示例程序都是使用单独的数据访问,就是说每个页面都写连接到数据库,存取数据,关闭数据库的代码。这种方式带来了一些弊端,一个就是如果你的数据库改变了,你必须一个页面一个页面的去更改数据库连接代码。S9v中国设计秀
第二个弊端就是代码冗余,很多代码都是重复的,不必要的。S9v中国设计秀
因此,我试图通过一种一致的数据库操作类来实现ASP.NET种的数据访问。S9v中国设计秀

我们就拿一般网站上都会有的新闻发布系统来做例子,它需要一个文章数据库,我们把这个数据库命名为 News_Articles。新闻发布系统涉及到 发布新闻,展示文章,管理文章等。S9v中国设计秀

一篇文章一般都会有标题,作者,发表时间,内容,另外我们需要把它们编号。我们把它写成一个类,叫 Article 类,代码如下:S9v中国设计秀

//Article.csS9v中国设计秀
using System;S9v中国设计秀

namespace News_Articles.DataS9v中国设计秀
{S9v中国设计秀
 /// <summary>S9v中国设计秀
 /// Summary description for Article.S9v中国设计秀
 /// </summary>S9v中国设计秀
 public class ArticleS9v中国设计秀
 {S9v中国设计秀
  PRivate int _id;   //文章编号S9v中国设计秀
  private string _author;  //文章的作者S9v中国设计秀
  private string _topic;  //文章的标题S9v中国设计秀
  private DateTime _postTime;  //文章的发表时间S9v中国设计秀
  private string _content;  //文章内容S9v中国设计秀

  public int IDS9v中国设计秀
  {S9v中国设计秀
   get { return _id;}S9v中国设计秀
   set { _id = value;}S9v中国设计秀
  }S9v中国设计秀
  public string AuthorS9v中国设计秀
  {S9v中国设计秀
   get { return _author; }S9v中国设计秀
   set { _author = value; }S9v中国设计秀
  }S9v中国设计秀
  public string TopicS9v中国设计秀
  {S9v中国设计秀
   get { return _topic; }S9v中国设计秀
   set { _topic = value; }S9v中国设计秀
  }S9v中国设计秀
  public string ContentS9v中国设计秀
  {S9v中国设计秀
   get { return _content; }S9v中国设计秀
   set { _content = value; }S9v中国设计秀
  }S9v中国设计秀
  public DateTime PostTime S9v中国设计秀
  {S9v中国设计秀
   get { return _postTime; }S9v中国设计秀
   set { _postTime = value; }S9v中国设计秀
  }S9v中国设计秀
 }S9v中国设计秀
}S9v中国设计秀

S9v中国设计秀
然后我们写一个文章集合类 ArticleCollectionS9v中国设计秀
代码如下S9v中国设计秀

S9v中国设计秀
 程序代码S9v中国设计秀

//ArticleCollection.csS9v中国设计秀
using System[color=#0000ff];S9v中国设计秀
using System.Collections;S9v中国设计秀

namespace News_Articles.DataS9v中国设计秀
{S9v中国设计秀
 /// <summary>S9v中国设计秀
 /// 文章的集合类,继承于 ArrayListS9v中国设计秀
 /// </summary>S9v中国设计秀
 public class ArticleCollection : ArrayListS9v中国设计秀
 {S9v中国设计秀
  public ArticleCollection() : base()S9v中国设计秀
  {S9v中国设计秀
  }S9v中国设计秀

  public ArticleCollection(ICollection c) : base(c)S9v中国设计秀
  {S9v中国设计秀
  }S9v中国设计秀
 }S9v中国设计秀
}[/color]S9v中国设计秀

S9v中国设计秀
这个类相当于一个ASP.NET中的DataSet(其实两者很不一样),很简单,主要的目的是把将很多篇文章集合,以便在ASP.NET页面中给DataGrid或者DataList作为数据源,以显示文章。S9v中国设计秀

现在我们可以实现对News_Articles数据库的操作了,我说过,这是一个数据库操作类。不妨命名为 ArticleDb。实现如下:S9v中国设计秀

 程序代码S9v中国设计秀

//ArticleDb.csS9v中国设计秀
using System;S9v中国设计秀
using System.Configuration;S9v中国设计秀
using System.Data;S9v中国设计秀
using System.Data.SqlClient;S9v中国设计秀

namespace News_Articles.DataS9v中国设计秀
{S9v中国设计秀
 /**//// <summary>S9v中国设计秀
 /// 数据库操作类,实现文章数据库的读取,插入,更新,删除S9v中国设计秀
 /// </summary>S9v中国设计秀
 public class ArticleDbS9v中国设计秀
 {S9v中国设计秀
  private SqlConnection _conn;       //SQL Server 数据库连接S9v中国设计秀
  private string   _articledb = "News_Articles"; //SQL Server 文章数据库表S9v中国设计秀
  S9v中国设计秀
  /**//// <summary>S9v中国设计秀
  /// 类的初始化,设置数据库连接S9v中国设计秀
  /// </summary>S9v中国设计秀
  public ArticleDb()S9v中国设计秀
  { S9v中国设计秀
   _conn = new SqlConnection(ConfigurationSettings.AppSettings["connectionString"]);S9v中国设计秀
  }S9v中国设计秀

  /**//// <summary>S9v中国设计秀
  /// 打开数据库连接S9v中国设计秀
  /// </summary>S9v中国设计秀
  public void Open()S9v中国设计秀
  {S9v中国设计秀
   if(_conn.State == ConnectionState.Closed)S9v中国设计秀
    _conn.Open();S9v中国设计秀
  }S9v中国设计秀

  /**//// <summary>S9v中国设计秀
  /// 关闭数据库连接S9v中国设计秀
  /// </summary>S9v中国设计秀
  public void Close()S9v中国设计秀
  {S9v中国设计秀
   if(_conn.State == ConnectionState.Open)S9v中国设计秀
    _conn.Close();S9v中国设计秀
  }S9v中国设计秀

  /**//// <summary>S9v中国设计秀
  /// 读取数据库中所有的 文章S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <returns>ArticleCollection</returns>S9v中国设计秀
  public ArticleCollection GetArticles()S9v中国设计秀
  {S9v中国设计秀
   ArticleCollection articles = new ArticleCollection();S9v中国设计秀
   string sql = "Select * FROM " + _articledb;S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql,_conn);S9v中国设计秀
   SqlDataReader dr = cmd.ExecuteReader();S9v中国设计秀
   while(dr.Read())S9v中国设计秀
   {S9v中国设计秀
    Article art = PopulateArticle(dr);S9v中国设计秀
    articles.Add(art);S9v中国设计秀
   }S9v中国设计秀
   dr.Close();S9v中国设计秀
   return articles;S9v中国设计秀
  }S9v中国设计秀

  S9v中国设计秀
  /**//// <summary>S9v中国设计秀
  /// 给定一个文章编号, 读取数据库中的一篇文章S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <returns>Article</returns>S9v中国设计秀
  public Article GetArticle(int articleId)S9v中国设计秀
  {S9v中国设计秀
   string sql = "Select * FROM " + _articledb + "Where ID='" + articleId + "'";S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql,_conn);S9v中国设计秀
   SqlDataReader dr = cmd.ExecuteReader();S9v中国设计秀
   Article article = PopulateArticle(dr);S9v中国设计秀
   dr.Close();S9v中国设计秀
   return article;S9v中国设计秀
  }S9v中国设计秀

  /**//// <summary>S9v中国设计秀
  /// 更新数据库记录,注意需要设定文章的编号S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <param name="article"></param>S9v中国设计秀
  public void UpdateArticle(Article article)S9v中国设计秀
  {S9v中国设计秀
   string sql = "Update " + _articledb +" SET Topic=@topic,Author=@author,Content=@content,PostTime=@postTime"S9v中国设计秀
    + " Where ID = @articleId";S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql,_conn);S9v中国设计秀

   cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value  = article.ID;S9v中国设计秀
   cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value = article.Topic;S9v中国设计秀
   cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = article.Author;S9v中国设计秀
   cmd.Parameters.Add("@content",SqlDbType.NText).Value  = article.Content;S9v中国设计秀
   cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;S9v中国设计秀

   cmd.ExecuteNonQuery();S9v中国设计秀

  }S9v中国设计秀

S9v中国设计秀
  /**//// <summary>S9v中国设计秀
  /// 取出数据库中特定作者发表的文章S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <param name="author"></param>S9v中国设计秀
  /// <returns>ArticleCollection</returns>S9v中国设计秀
  public ArticleCollection GetArticlesByAuthor(string author)S9v中国设计秀
  {S9v中国设计秀
   string sql = "Select * FROM " + _articledb +" Where Author='" + author + "'";S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql, _conn);S9v中国设计秀

   ArticleCollection articleCollection = new ArticleCollection();S9v中国设计秀

   SqlDataReader dr = cmd.ExecuteReader();S9v中国设计秀

   while (dr.Read())S9v中国设计秀
   {S9v中国设计秀
    Article a = PopulateArticle(dr);S9v中国设计秀
    articleCollection.Add(a);S9v中国设计秀
   }S9v中国设计秀
   dr.Close();  S9v中国设计秀
   return articleCollection;S9v中国设计秀
   S9v中国设计秀
  }S9v中国设计秀

S9v中国设计秀
  /**//// <summary>S9v中国设计秀
  /// 删除给定编号的一篇文章S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <param name="articleID"></param>S9v中国设计秀
  public void DeleteArticle(int articleID)S9v中国设计秀
  {S9v中国设计秀
   string sql = "Delete FROM " + _articledb + " Where ID='" + articleID + "'";S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql, _conn);S9v中国设计秀
   cmd.ExecuteNonQuery();S9v中国设计秀
  }S9v中国设计秀

 S9v中国设计秀

S9v中国设计秀
  /**//// <summary>S9v中国设计秀
  /// 通过 SqlDataReader 生成文章对象S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <param name="dr"></param>S9v中国设计秀
  /// <returns></returns>S9v中国设计秀
  private Article PopulateArticle(SqlDataReader dr)S9v中国设计秀
  {S9v中国设计秀
   Article art = new Article();S9v中国设计秀

   art.ID  = Convert.ToInt32(dr["ID"]);S9v中国设计秀
   art.Author = Convert.ToString(dr["Author"]);S9v中国设计秀
   art.Topic = Convert.ToString(dr["Topic"]);S9v中国设计秀

   art.Content = Convert.ToString(dr["Content"]);S9v中国设计秀
   art.PostTime= Convert.ToDateTime(dr["PostTime"]);S9v中国设计秀

   return art;S9v中国设计秀
  }S9v中国设计秀

 S9v中国设计秀

  /**//// <summary>S9v中国设计秀
  /// 增加一篇文章到数据库中,返回文章的编号S9v中国设计秀
  /// </summary>S9v中国设计秀
  /// <param name="article"></param>S9v中国设计秀
  /// <returns>刚刚插入的文章的编号</returns>S9v中国设计秀
  public int AddPost(Article article)S9v中国设计秀
  {  S9v中国设计秀
   string sql = "Insert INTO " + _articledb +"(Author,Topic,Content,PostTime)"+S9v中国设计秀
    "VALUES(@author, @topic, @content, @postTime) "+S9v中国设计秀
    "Select @postID = @@IDENTITY";S9v中国设计秀
   SqlCommand cmd = new SqlCommand(sql,_conn);S9v中国设计秀
   cmd.Parameters.Add("@postID",SqlDbType.Int,4);S9v中国设计秀
   cmd.Parameters["@postID"].Direction = ParameterDirection.Output;S9v中国设计秀

   cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value = article.Author;S9v中国设计秀
   cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value = article.Topic;S9v中国设计秀
   cmd.Parameters.Add("@content",SqlDbType.Text).Value   = article.Content;S9v中国设计秀
   cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value = article.PostTime;S9v中国设计秀
  S9v中国设计秀
   cmd.ExecuteNonQuery();S9v中国设计秀

   article.ID = (int)cmd.Parameters["@postID"].Value;S9v中国设计秀
   return article.ID;S9v中国设计秀
   S9v中国设计秀
  }S9v中国设计秀
 }S9v中国设计秀
}S9v中国设计秀

 S9v中国设计秀

基本的框架已经出来了。如果我们要在一个ASP.NET页面中显示文章数据库 News_Artices的数据,那么仅仅需要添加一个 DataGrid 或者 DataList,然后绑定数据源。例如S9v中国设计秀
在 Default.aspx 中添加一个 DataGrid ,命名为 ArticlesDataGrid,在 后台代码 Default.aspx.cs 中添加S9v中国设计秀

 程序代码S9v中国设计秀
using News_Articles.Data;S9v中国设计秀

S9v中国设计秀
并在 Page_Load 中添加如下的代码:S9v中国设计秀

S9v中国设计秀
 程序代码S9v中国设计秀
private void Page_Load(object sender, System.EventArgs e)S9v中国设计秀
{S9v中国设计秀
 // Put user code to initialize the page hereS9v中国设计秀
 ArticleDb myArticleDb = new ArticleDb();S9v中国设计秀
 myArticleDb.Open();S9v中国设计秀
 ArticleCollection articles = myArticleDb.GetArticles();S9v中国设计秀
 this.ArticlesDataGrid.DataSource = articles;S9v中国设计秀
 if(!Page.IsPostBack)S9v中国设计秀
 {S9v中国设计秀
  this.ArticlesDataGrid.DataBind();S9v中国设计秀
 }S9v中国设计秀

 myArticleDb.Close();S9v中国设计秀
}S9v中国设计秀

S9v中国设计秀
这样就可以实现读取文章数据库中所有文章。S9v中国设计秀
如果需要删除一篇文章那么添加如下代码:S9v中国设计秀

 程序代码S9v中国设计秀

 //删除编号为 1 的文章S9v中国设计秀
 myArticleDb.DeleteArticle(1);S9v中国设计秀

插入一篇文章,代码如下:S9v中国设计秀

S9v中国设计秀
 程序代码S9v中国设计秀
  //插入一篇新的文章,不需要指定文章编号,文章编号插入成功后由SQL Server返回。S9v中国设计秀
 Article newArticle  = new Article();S9v中国设计秀
 newArticle.Author  = "Willmove";S9v中国设计秀
 newArticle.Topic  = "测试插入一篇新的文章";S9v中国设计秀
 newArticle.Content  = "这是我写的文章的内容";S9v中国设计秀
 newArticle.PostTime = DateTime.Now;S9v中国设计秀
 int articleId = myArticleDb.AddPost(newArticle);S9v中国设计秀

S9v中国设计秀
更新一篇文章,代码如下:S9v中国设计秀
 S9v中国设计秀

 程序代码S9v中国设计秀
  //更新一篇文章,注意需要指定文章的编号S9v中国设计秀
 Article updateArticle  = new Article();S9v中国设计秀
 updateArticle.ID = 3; //注意需要指定文章的编号S9v中国设计秀
 updateArticle.Author  = "Willmove";S9v中国设计秀
 updateArticle.Topic  = "测试更新数据";S9v中国设计秀
 updateArticle.Content  = "这是我更新的文章的内容";S9v中国设计秀
 updateArticle.PostTime = DateTime.Now;S9v中国设计秀
 myArticleDb.UpdateArticle(updateArticle);S9v中国设计秀

S9v中国设计秀
以上只是一个框架,具体的实现还有很多细节没有列出来。但是基于上面的框架,你可以比较方便的写出对数据库操作的代码。另外一个建议就是把上面的数据库访问的 SQL 语句写成数据库存储过程,比如 添加一篇文章:S9v中国设计秀

 程序代码S9v中国设计秀
Create PROCEDURE AddPostS9v中国设计秀
(S9v中国设计秀
 @ID  int OUTPUT,S9v中国设计秀
 @Author nvarchar(100),S9v中国设计秀
 @Topic nvarchar(100),S9v中国设计秀
 @Content ntext,S9v中国设计秀
 @PostTime datetimeS9v中国设计秀
)S9v中国设计秀
ASS9v中国设计秀
Insert INTO News_Articles(Author, Topic, Content, PostTime) VALUES (@Author, @Topic, @Content, @PostTime);S9v中国设计秀
 Select @ID = @@IDENTITYS9v中国设计秀
GOS9v中国设计秀

S9v中国设计秀
附1:News_Articles 数据库的字段S9v中国设计秀

S9v中国设计秀
 程序代码S9v中国设计秀

字段名 描述 数据类型 长度 是否可为空S9v中国设计秀
ID 文章编号 int  4 否S9v中国设计秀
Topic 文章标题 nvarchar 100  否S9v中国设计秀
Author 作者 nvarchar 100 是S9v中国设计秀
Content 文章内容 ntext 16 否S9v中国设计秀
PostTime 发表时间 datetime 8 否S9v中国设计秀

其中 PostTime 的默认值可以设置为(getutcdate())S9v中国设计秀

SQL 语句是S9v中国设计秀

  Create TABLE [News_Articles] (S9v中国设计秀
 [ID] [int] IDENTITY (1, 1) NOT NULL ,S9v中国设计秀
 [Topic] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,S9v中国设计秀
 [Author] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,S9v中国设计秀
 [Content] [ntext] COLLATE Chinese_PRC_CI_AS NOT NULL ,S9v中国设计秀
 [PostTime] [datetime] NOT NULL CONSTRAINT [DF_News_Articles_PostTime] DEFAULT (getutcdate())S9v中国设计秀
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]S9v中国设计秀
GOS9v中国设计秀

S9v中国设计秀
附2:News_Articles 项目源代码S9v中国设计秀
说明:打开项目文件 News_Articles.csproj 之前需要先设置 虚拟路径 News_Articles,

本文引用地址:/bc/article_46483.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明