您的位置:首页 > 编程语言

BlogEngine.net 代码学习笔记(一)

2007-11-24 15:51 597 查看
计划将blogEngine的代码阅读过程及不懂的地方全部记下来,不知道是否能坚持得住,我用的是1.2版板:

(虽然已不能算是初学者,可是本人记性实在太差,错误之处还请指证:

blogEngine类结构可以参考:
http://www.cnblogs.com/jisiki/archive/2007/04/20/721217.html
以下列出最先准备研究的几个类结构:



BlogProvider:所有数据提供的基类

MSSQLBlogProvider:数据库访问方式的数据提供和保存

拿其中的一个函数来进行说明:

public class MSSQLBlogProvider : BlogProvider

{

//提供一个连接:

private SqlConnection providerConn;

#region Posts

///<summary>

/// Retrieves a post based on the specified Id.

///</summary>

public override Post SelectPost(Guid id)

{

//OpenConnection()用于初始化providerConn;

bool connClose = OpenConnection();

Post post = new Post();

string sqlQuery = "SELECT PostID, Title, Description, PostContent, DateCreated, " +

"DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug " +

"FROM be_Posts " +

"WHERE PostID = @id";

//SqlCommand:表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程。

//要完成此操作,需将一个 SqlConnection、一个查询字符串(它是一个 Transact-SQL SELECT 语句)和 SqlParameter 对象的一个数组传递给该方法。

SqlCommand cmd = new SqlCommand(sqlQuery, providerConn);

cmd.Parameters.Add(new SqlParameter("@id", id.ToString()));

//使用DataReader可以提高应用程序的性能,是将数据输出到表示层重要的手段。在创建了一个Command对象之后,通过调用Command.ExecuteReader方法再创建DataReader对象,就能够使用Read方法从数据源检索记录集了。

SqlDataReader rdr = cmd.ExecuteReader();

rdr.Read();

post.Id = rdr.GetGuid(0);

post.Title = rdr.GetString(1);

post.Content = rdr.GetString(3);

if (!rdr.IsDBNull(2))

post.Description = rdr.GetString(2);

if (!rdr.IsDBNull(4))

post.DateCreated = rdr.GetDateTime(4);

if (!rdr.IsDBNull(5))

post.DateModified = rdr.GetDateTime(5);

if (!rdr.IsDBNull(6))

post.Author = rdr.GetString(6);

if (!rdr.IsDBNull(7))

post.IsPublished = rdr.GetBoolean(7);

if (!rdr.IsDBNull(8))

post.IsCommentsEnabled = rdr.GetBoolean(8);

if (!rdr.IsDBNull(9))

post.Raters = rdr.GetInt32(9);

if (!rdr.IsDBNull(10))

post.Rating = rdr.GetFloat(10);

if (!rdr.IsDBNull(11))

post.Slug = rdr.GetString(11);

else

post.Slug = "";

//需要着重指出的是在使用完DataReader后应该显式的关闭DataReader对象。

rdr.Close();

// Tags

sqlQuery = "SELECT Tag " +

"FROM be_PostTag " +

"WHERE PostID = @id";

cmd.CommandText = sqlQuery;

rdr = cmd.ExecuteReader();

while (rdr.Read())

{

if (!rdr.IsDBNull(0))

post.Tags.Add(rdr.GetString(0));

}

rdr.Close();

// Categories

sqlQuery = "SELECT CategoryID " +

"FROM be_PostCategory " +

"WHERE PostID = @id";

cmd.CommandText = sqlQuery;

rdr = cmd.ExecuteReader();

while (rdr.Read())

{

Guid key = rdr.GetGuid(0);

if (Category.GetCategory(key) != null)

post.Categories.Add(Category.GetCategory(key));

}

rdr.Close();

// Comments

sqlQuery = "SELECT PostCommentID, CommentDate, Author, Email, Website, Comment, Country, Ip, IsApproved " +

"FROM be_PostComment " +

"WHERE PostID = @id";

cmd.CommandText = sqlQuery;

rdr = cmd.ExecuteReader();

while (rdr.Read())

{

Comment comment = new Comment();

comment.Id = rdr.GetGuid(0);

comment.IsApproved = true;

comment.Author = rdr.GetString(2);

if (!rdr.IsDBNull(4))

{

Uri website;

if (Uri.TryCreate(rdr.GetString(4), UriKind.Absolute, out website))

comment.Website = website;

}

comment.Email = rdr.GetString(3);

comment.Content = rdr.GetString(5);

comment.DateCreated = rdr.GetDateTime(1);

comment.Post = post;

if (!rdr.IsDBNull(6))

comment.Country = rdr.GetString(6);

if (!rdr.IsDBNull(7))

comment.IP = rdr.GetString(7);

if (!rdr.IsDBNull(8))

comment.IsApproved = rdr.GetBoolean(8);

else

comment.IsApproved = true;

post.Comments.Add(comment);

}

post.Comments.Sort();

rdr.Close();

// Email Notification

sqlQuery = "SELECT NotifyAddress " +

"FROM be_PostNotify " +

"WHERE PostID = @id";

cmd.CommandText = sqlQuery;

rdr = cmd.ExecuteReader();

while (rdr.Read())

{

if (!rdr.IsDBNull(0))

post.NotificationEmails.Add(rdr.GetString(0));

}

rdr.Close();

if (connClose)

providerConn.Close();

return post;

}

private bool OpenConnection()

{

bool result = false;

// Initial if needed

if (providerConn == null)

providerConn = new SqlConnection(ConfigurationManager.ConnectionStrings["BlogEngine"].ConnectionString);

// Open it if needed

if (providerConn.State == System.Data.ConnectionState.Closed)

{

result = true;

providerConn.Open();

}

return result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: