ASP.NET网页编程之使ASP.NET中的数据库操纵变得复杂
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。asp.net|数据|数据库<P>Willmove主页:http://www.amuhouse.com
E-mail:willmove@gmail.com
声明:系作者原创作品,转载请说明出处。
ASP.NET中一样平常都是利用SQLServer作为背景数据库。一样平常的ASP.NET数据库操纵示例程序都是利用独自的数据会见,就是说每一个页面都写毗连到数据库,存取数据,封闭数据库的代码。这类体例带来了一些坏处,一个就是假如你的数据库改动了,你必需一个页面一个页面的往变动数据库毗连代码。
第二个坏处就是代码冗余,良多代码都是反复的,不用要的。
因而,我试图经由过程一种分歧的数据库操纵类来完成ASP.NET种的数据会见。
我们就拿一样平常网站上城市有的旧事公布体系来做例子,它必要一个文章数据库,我们把这个数据库定名为News_Articles。旧事公布体系触及到公布旧事,展现文章,办理文章等。
一篇文章一样平常城市有题目,作者,宣布工夫,内容,别的我们必要把它们编号。我们把它写成一个类,叫Article类,代码以下:
//Article.cs
usingSystem;
namespaceNews_Articles.Data
{
///
///SummarydescriptionforArticle.
///
publicclassArticle
{
privateint_id;//文章编号
privatestring_author;//文章的作者
privatestring_topic;//文章的题目
privateDateTime_postTime;//文章的宣布工夫
privatestring_content;//文章内容
publicintID
{
get{return_id;}
set{_id=value;}
}
publicstringAuthor
{
get{return_author;}
set{_author=value;}
}
publicstringTopic
{
get{return_topic;}
set{_topic=value;}
}
publicstringContent
{
get{return_content;}
set{_content=value;}
}
publicDateTimePostTime
{
get{return_postTime;}
set{_postTime=value;}
}
}
}
然后我们写一个文章汇合类ArticleCollection
代码以下
程序代码
//ArticleCollection.cs
usingSystem;
usingSystem.Collections;
namespaceNews_Articles.Data
{
///
///文章的汇合类,承继于ArrayList
///
publicclassArticleCollection:ArrayList
{
publicArticleCollection():base()
{
}
publicArticleCollection(ICollectionc):base(c)
{
}
}
}
这个类相称于一个ASP.NET中的DataSet(实在二者很纷歧样),很复杂,次要的目标是把将良多篇文章汇合,以便在ASP.NET页面中给DataGrid大概DataList作为数据源,以显现文章。
如今我们能够完成对News_Articles数据库的操纵了,我说过,这是一个数据库操纵类。无妨定名为ArticleDb。完成以下:
程序代码
//ArticleDb.cs
usingSystem;
usingSystem.Configuration;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceNews_Articles.Data
{
/**////
///数据库操纵类,完成文章数据库的读取,拔出,更新,删除
///
publicclassArticleDb
{
privateSqlConnection_conn;//SQLServer数据库毗连
privatestring_articledb="News_Articles";//SQLServer文章数据库表
/**////
///类的初始化,设置数据库毗连
///
publicArticleDb()
{
_conn=newSqlConnection(ConfigurationSettings.AppSettings["connectionString"]);
}
/**////
///翻开数据库毗连
///
publicvoidOpen()
{
if(_conn.State==ConnectionState.Closed)
_conn.Open();
}
/**////
///封闭数据库毗连
///
publicvoidClose()
{
if(_conn.State==ConnectionState.Open)
_conn.Close();
}
/**////
///读取数据库中一切的文章
///
///ArticleCollection
publicArticleCollectionGetArticles()
{
ArticleCollectionarticles=newArticleCollection();
stringsql="Select*FROM"+_articledb;
SqlCommandcmd=newSqlCommand(sql,_conn);
SqlDataReaderdr=cmd.ExecuteReader();
while(dr.Read())
{
Articleart=PopulateArticle(dr);
articles.Add(art);
}
dr.Close();
returnarticles;
}
<P>/**////
///给定一个文章编号,读取数据库中的一篇文章
///
///Article
publicArticleGetArticle(intarticleId)
{
stringsql="Select*FROM"+_articledb+"WhereID="+articleId+"";
SqlCommandcmd=newSqlCommand(sql,_conn);
SqlDataReaderdr=cmd.ExecuteReader();
Articlearticle=PopulateArticle(dr);
dr.Close();
returnarticle;
}
/**////
///更新数据库纪录,注重必要设定文章的编号
///
///
publicvoidUpdateArticle(Articlearticle)
{
stringsql="Update"+_articledb+"SETTopic=@topic,Author=@author,Content=@content,PostTime=@postTime"
+"WhereID=@articleId";
SqlCommandcmd=newSqlCommand(sql,_conn);
cmd.Parameters.Add("@articleId",SqlDbType.Int,4).Value=article.ID;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,100).Value=article.Topic;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value=article.Author;
cmd.Parameters.Add("@content",SqlDbType.NText).Value=article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value=article.PostTime;
cmd.ExecuteNonQuery();
}
/**////
///掏出数据库中特定作者宣布的文章
///
///
///ArticleCollection
publicArticleCollectionGetArticlesByAuthor(stringauthor)
{
stringsql="Select*FROM"+_articledb+"WhereAuthor="+author+"";
SqlCommandcmd=newSqlCommand(sql,_conn);
ArticleCollectionarticleCollection=newArticleCollection();
SqlDataReaderdr=cmd.ExecuteReader();
while(dr.Read())
{
Articlea=PopulateArticle(dr);
articleCollection.Add(a);
}
dr.Close();
returnarticleCollection;
}
/**////
///删除给定编号的一篇文章
///
///
publicvoidDeleteArticle(intarticleID)
{
stringsql="DeleteFROM"+_articledb+"WhereID="+articleID+"";
SqlCommandcmd=newSqlCommand(sql,_conn);
cmd.ExecuteNonQuery();
}
/**////
///经由过程SqlDataReader天生文章工具
///
///
///
privateArticlePopulateArticle(SqlDataReaderdr)
{
Articleart=newArticle();
art.ID=Convert.ToInt32(dr["ID"]);
art.Author=Convert.ToString(dr["Author"]);
art.Topic=Convert.ToString(dr["Topic"]);
art.Content=Convert.ToString(dr["Content"]);
art.PostTime=Convert.ToDateTime(dr["PostTime"]);
returnart;
}
/**////
///增添一篇文章到数据库中,前往文章的编号
///
///
///方才拔出的文章的编号
publicintAddPost(Articlearticle)
{
stringsql="InsertINTO"+_articledb+"(Author,Topic,Content,PostTime)"+
"VALUES(@author,@topic,@content,@postTime)"+
"Select@postID=IDENTITY";
SqlCommandcmd=newSqlCommand(sql,_conn);
cmd.Parameters.Add("@postID",SqlDbType.Int,4);
cmd.Parameters["@postID"].Direction=ParameterDirection.Output;
cmd.Parameters.Add("@author",SqlDbType.NVarChar,100).Value=article.Author;
cmd.Parameters.Add("@topic",SqlDbType.NVarChar,400).Value=article.Topic;
cmd.Parameters.Add("@content",SqlDbType.Text).Value=article.Content;
cmd.Parameters.Add("@postTime",SqlDbType.DateTime).Value=article.PostTime;
cmd.ExecuteNonQuery();
article.ID=(int)cmd.Parameters["@postID"].Value;
returnarticle.ID;
}
}
}
基础的框架已出来了。假如我们要在一个ASP.NET页面中显现文章数据库News_Artices的数据,那末仅仅必要增加一个DataGrid大概DataList,然后绑定命据源。比方
在Default.aspx中增加一个DataGrid,定名为ArticlesDataGrid,在背景代码Default.aspx.cs中增加
程序代码
usingNews_Articles.Data;
并在Page_Load中增加以下的代码:
程序代码
privatevoidPage_Load(objectsender,System.EventArgse)
{
//Putusercodetoinitializethepagehere
ArticleDbmyArticleDb=newArticleDb();
myArticleDb.Open();
ArticleCollectionarticles=myArticleDb.GetArticles();
this.ArticlesDataGrid.DataSource=articles;
if(!Page.IsPostBack)
{
this.ArticlesDataGrid.DataBind();
}
myArticleDb.Close();
}
如许就能够完成读取文章数据库中一切文章。
假如必要删除一篇文章那末增加以下代码:
程序代码
//删除编号为1的文章
myArticleDb.DeleteArticle(1);
拔出一篇文章,代码以下:
程序代码
//拔出一篇新的文章,不必要指定文章编号,文章编号拔出乐成后由SQLServer前往。
ArticlenewArticle=newArticle();
newArticle.Author="Willmove";
newArticle.Topic="测试拔出一篇新的文章";
newArticle.Content="这是我写的文章的内容";
newArticle.PostTime=DateTime.Now;
intarticleId=myArticleDb.AddPost(newArticle);
更新一篇文章,代码以下:
程序代码
//更新一篇文章,注重必要指定文章的编号
ArticleupdateArticle=newArticle();
updateArticle.ID=3;//注重必要指定文章的编号
updateArticle.Author="Willmove";
updateArticle.Topic="测试更新数据";
updateArticle.Content="这是我更新的文章的内容";
updateArticle.PostTime=DateTime.Now;
myArticleDb.UpdateArticle(updateArticle);
以上只是一个框架,详细的完成另有良多细节没有列出来。可是基于下面的框架,你能够对照便利的写出对数据库操纵的代码。别的一个倡议就是把下面的数据库会见的SQL语句写成数据库存储历程,好比增加一篇文章:
程序代码
CreatePROCEDUREAddPost
(
@IDintOUTPUT,
@Authornvarchar(100),
@Topicnvarchar(100),
@Contentntext,
@PostTimedatetime
)
AS
InsertINTONews_Articles(Author,Topic,Content,PostTime)VALUES(@Author,@Topic,@Content,@PostTime);
Select@ID=IDENTITY
GO
附1:News_Articles数据库的字段
程序代码
字段名形貌数据范例长度是不是可为空
ID文章编号int4否
Topic文章题目nvarchar100否
Author作者nvarchar100是
Content文章内容ntext16否
PostTime宣布工夫datetime8否
个中PostTime的默许值能够设置为(getutcdate())
SQL语句是
CreateTABLE(
IDENTITY(1,1)NOTNULL,
(100)COLLATEChinese_PRC_CI_ASNOTNULL,
(100)COLLATEChinese_PRC_CI_ASNULL,
COLLATEChinese_PRC_CI_ASNOTNULL,
NOTNULLCONSTRAINTDEFAULT(getutcdate())
)ONTEXTIMAGE_ON
GO
附2:News_Articles项目源代码
申明:翻开项目文件News_Articles.csproj之前必要先设置假造路径News_Articles,大概在News_Articles.csproj.webinfo中变动设置。要一般运转还必需安装有SQLServer而且安装了文章数据库News_Articles。项目源代码的根目次下有SQL文本文件。
不可能天天有学习.net),我一同学说,你应该早就有作品啦。我惶惶然…… 但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。 JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦! 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
页:
[1]