国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

使ASP.NET中的數據庫操作變得簡單

2024-07-10 13:10:34
字體:
來源:轉載
供稿:網友

作者:willmove
主頁:http://www.amuhouse.com
e-mail: [email protected]
聲明:系作者原創作品,轉載請注明出處。

asp.net中一般都是使用sql server作為后臺數據庫。一般的asp.net數據庫操作示例程序都是使用單獨的數據訪問,就是說每個頁面都寫連接到數據庫,存取數據,關閉數據庫的代碼。這種方式帶來了一些弊端,一個就是如果你的數據庫改變了,你必須一個頁面一個頁面的去更改數據庫連接代碼。
第二個弊端就是代碼冗余,很多代碼都是重復的,不必要的。
因此,我試圖通過一種一致的數據庫操作類來實現asp.net種的數據訪問。

我們就拿一般網站上都會有的新聞發布系統來做例子,它需要一個文章數據庫,我們把這個數據庫命名為 news_articles。新聞發布系統涉及到 發布新聞,展示文章,管理文章等。

一篇文章一般都會有標題,作者,發表時間,內容,另外我們需要把它們編號。我們把它寫成一個類,叫 article 類,代碼如下:

//article.cs
using system;

namespace news_articles.data
{
///
/// summary description for article.
///

public class article
{
private int _id; //文章編號
private string _author; //文章的作者
private string _topic; //文章的標題
private datetime _posttime; //文章的發表時間
private string _content; //文章內容

public int id
{
get { return _id;}
set { _id = value;}
}
public string author
{
get { return _author; }
set { _author = value; }
}
public string topic
{
get { return _topic; }
set { _topic = value; }
}
public string content
{
get { return _content; }
set { _content = value; }
}
public datetime posttime
{
get { return _posttime; }
set { _posttime = value; }
}
}
}


然后我們寫一個文章集合類 articlecollection
代碼如下


程序代碼

//articlecollection.cs
using system;
using system.collections;

namespace news_articles.data
{
///
/// 文章的集合類,繼承于 arraylist
///

public class articlecollection : arraylist
{
public articlecollection() : base()
{
}

public articlecollection(icollection c) : base(c)
{
}
}
}



這個類相當于一個asp.net中的dataset(其實兩者很不一樣),很簡單,主要的目的是把將很多篇文章集合,以便在asp.net頁面中給datagrid或者datalist作為數據源,以顯示文章。

現在我們可以實現對news_articles數據庫的操作了,我說過,這是一個數據庫操作類。不妨命名為 articledb。實現如下:

程序代碼

//articledb.cs
using system;
using system.configuration;
using system.data;
using system.data.sqlclient;

namespace news_articles.data
{
/**////
/// 數據庫操作類,實現文章數據庫的讀取,插入,更新,刪除
///

public class articledb
{
private sqlconnection _conn; //sql server 數據庫連接
private string _articledb = "news_articles"; //sql server 文章數據庫表

/**////
/// 類的初始化,設置數據庫連接
///

public articledb()
{
_conn = new sqlconnection(configurationsettings.appsettings["connectionstring"]);
}

/**////
/// 打開數據庫連接
///

public void open()
{
if(_conn.state == connectionstate.closed)
_conn.open();
}

/**////
/// 關閉數據庫連接
///

public void close()
{
if(_conn.state == connectionstate.open)
_conn.close();
}

/**////
/// 讀取數據庫中所有的 文章
///

/// articlecollection
public articlecollection getarticles()
{
articlecollection articles = new articlecollection();
string sql = "select * from " + _articledb;
sqlcommand cmd = new sqlcommand(sql,_conn);
sqldatareader dr = cmd.executereader();
while(dr.read())
{
article art = populatearticle(dr);
articles.add(art);
}
dr.close();
return articles;
}

/**////
/// 給定一個文章編號, 讀取數據庫中的一篇文章
///

/// article
public article getarticle(int articleid)
{
string sql = "select * from " + _articledb + "where id='" + articleid + "'";
sqlcommand cmd = new sqlcommand(sql,_conn);
sqldatareader dr = cmd.executereader();
article article = populatearticle(dr);
dr.close();
return article;
}

/**////
/// 更新數據庫記錄,注意需要設定文章的編號
///

///
public void updatearticle(article article)
{
string sql = "update " + _articledb +" set [email protected],[email protected],[email protected],[email protected]"
+ " where id = @articleid";
sqlcommand cmd = new sqlcommand(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
public articlecollection getarticlesbyauthor(string author)
{
string sql = "select * from " + _articledb +" where author='" + author + "'";
sqlcommand cmd = new sqlcommand(sql, _conn);

articlecollection articlecollection = new articlecollection();

sqldatareader dr = cmd.executereader();

while (dr.read())
{
article a = populatearticle(dr);
articlecollection.add(a);
}
dr.close();
return articlecollection;

}


/**////
/// 刪除給定編號的一篇文章
///

///
public void deletearticle(int articleid)
{
string sql = "delete from " + _articledb + " where id='" + articleid + "'";
sqlcommand cmd = new sqlcommand(sql, _conn);
cmd.executenonquery();
}




/**////
/// 通過 sqldatareader 生成文章對象
///

///
///
private article populatearticle(sqldatareader dr)
{
article art = new article();

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"]);

return art;
}



/**////
/// 增加一篇文章到數據庫中,返回文章的編號
///

///
/// 剛剛插入的文章的編號
public int addpost(article article)
{
string sql = "insert into " + _articledb +"(author,topic,content,posttime)"+
"values(@author, @topic, @content, @posttime) "+
"select @postid = identity";
sqlcommand cmd = new sqlcommand(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;
return article.id;

}
}
}



基本的框架已經出來了。如果我們要在一個asp.net頁面中顯示文章數據庫 news_artices的數據,那么僅僅需要添加一個 datagrid 或者 datalist,然后綁定數據源。例如
在 default.aspx 中添加一個 datagrid ,命名為 articlesdatagrid,在 后臺代碼 default.aspx.cs 中添加

程序代碼
using news_articles.data;


并在 page_load 中添加如下的代碼:


程序代碼
private void page_load(object sender, system.eventargs e)
{
// put user code to initialize the page here
articledb myarticledb = new articledb();
myarticledb.open();
articlecollection articles = myarticledb.getarticles();
this.articlesdatagrid.datasource = articles;
if(!page.ispostback)
{
this.articlesdatagrid.databind();
}

myarticledb.close();
}


這樣就可以實現讀取文章數據庫中所有文章。
如果需要刪除一篇文章那么添加如下代碼:

程序代碼

//刪除編號為 1 的文章
myarticledb.deletearticle(1);

插入一篇文章,代碼如下:


程序代碼
//插入一篇新的文章,不需要指定文章編號,文章編號插入成功后由sql server返回。
article newarticle = new article();
newarticle.author = "willmove";
newarticle.topic = "測試插入一篇新的文章";
newarticle.content = "這是我寫的文章的內容";
newarticle.posttime = datetime.now;
int articleid = myarticledb.addpost(newarticle);


更新一篇文章,代碼如下:


程序代碼
//更新一篇文章,注意需要指定文章的編號
article updatearticle = new article();
updatearticle.id = 3; //注意需要指定文章的編號
updatearticle.author = "willmove";
updatearticle.topic = "測試更新數據";
updatearticle.content = "這是我更新的文章的內容";
updatearticle.posttime = datetime.now;
myarticledb.updatearticle(updatearticle);


以上只是一個框架,具體的實現還有很多細節沒有列出來。但是基于上面的框架,你可以比較方便的寫出對數據庫操作的代碼。另外一個建議就是把上面的數據庫訪問的 sql 語句寫成數據庫存儲過程,比如 添加一篇文章:

程序代碼
create procedure addpost
(
@id int output,
@author nvarchar(100),
@topic nvarchar(100),
@content ntext,
@posttime datetime
)
as
insert into news_articles(author, topic, content, posttime) values (@author, @topic, @content, @posttime);
select @id = identity
go


附1:news_articles 數據庫的字段


程序代碼

字段名 描述 數據類型 長度 是否可為空
id 文章編號 int 4 否
topic 文章標題 nvarchar 100 否
author 作者 nvarchar 100 是
content 文章內容 ntext 16 否
posttime 發表時間 datetime 8 否

其中 posttime 的默認值可以設置為(getutcdate())

sql 語句是

create table [news_articles] (
[id] [int] identity (1, 1) not null ,
[topic] [nvarchar] (100) collate chinese_prc_ci_as not null ,
[author] [nvarchar] (100) collate chinese_prc_ci_as null ,
[content] [ntext] collate chinese_prc_ci_as not null ,
[posttime] [datetime] not null constraint [df_news_articles_posttime] default (getutcdate())
) on [primary] textimage_on [primary]
go


附2:news_articles 項目源代碼
說明:打開項目文件 news_articles.csproj 之前需要先設置 虛擬路徑 news_articles,或者在 news_articles.csproj.webinfo 中更改設置。要正常運行還必須安裝有sql server 并且安裝了文章數據庫 news_articles。項目源代碼的根目錄下有 sql 文本文件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿坝| 通城县| 扎鲁特旗| 广东省| 武鸣县| 文安县| 清镇市| 德兴市| 陆良县| 海安县| 闽清县| 大化| 二连浩特市| 楚雄市| 革吉县| 兴文县| 阳朔县| 军事| 神农架林区| 喀什市| 乐陵市| 深泽县| 武义县| 南郑县| 三穗县| 屏东市| 额济纳旗| 苍梧县| 六盘水市| 石棉县| 邵阳县| 宁波市| 鞍山市| 平阴县| 新巴尔虎左旗| 青田县| 武义县| 汕尾市| 新沂市| 大埔县| 二手房|