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;
}
(虽然已不能算是初学者,可是本人记性实在太差,错误之处还请指证:
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;
}
相关文章推荐
- BlogEngine.net 代码学习笔记(二)
- BlogEngine.net 代码学习笔记
- BlogEngine.net 代码学习笔记
- BlogEngine.net 学习笔记(一)
- BlogEngine.net 学习笔记一:没有做不到,只有想不到
- 学习BlogEngine.Net解读笔记系列(一)
- BlogEngine.NET 学习笔记(二)
- asp.net 学习笔记 代码块标记
- 开发asp.net自定义控件(asp.net学习笔记三) 选择自 cashcho 的 Blog
- Asp.Net Ajax 学习笔记21 VS2008的JavaScript代码提示功能
- ASP.NET MVC学习笔记-----使用自定义的View Engine
- 微分流形与黎曼几何学习笔记(转自http://blog.sciencenet.cn/home.php?mod=space&uid=81613&do=blog&id=333317)
- Linux netfilter 学习笔记 之十二 ip层netfilter的NAT模块代码分析
- [ASP.NET学习笔记之三十]ASP.NET 2.0的代码隐藏和编译模型
- setuid函数的学习笔记 转自:http://blog.chinaunix.net/space.php?uid=1877180&do=blog&cuid=1132108
- excoax_net学习笔记之eth_mac_v2 -----INIT 出口代码
- asp.net自定义控件代码学习笔记
- 别人:OpenCV学习笔记(一)——安装配置、第一个程序(http://blog.csdn.net/yang_xian521/article/details/6894228)
- C++ vector 类学习笔记 http://blog.csdn.net/whz_zb/article/details/6827999
- two_layer_net 代码学习笔记