昨天晚上试着将XmlProvider转换成SqlProvider
要做的第一件事就是数据上的转移
这个倒好办
<script runat="server">
protected void Update(object sender, EventArgs e)
{
int i = 0;
string folder = Server.MapPath("~/app_data/posts/");
BlogEngine.Core.Providers.XmlBlogProvider p = new BlogEngine.Core.Providers.XmlBlogProvider();
BlogEngine.Core.Providers.MSSQLBlogProvider sql = new BlogEngine.Core.Providers.MSSQLBlogProvider();
System.Collections.Generic.List<BlogEngine.Core.Post> posts = new List<BlogEngine.Core.Post>();
foreach (string file in System.IO.Directory.GetFiles(folder, "*.xml", SearchOption.TopDirectoryOnly))
{
FileInfo info = new FileInfo(file);
string id = info.Name.Replace(".xml", string.Empty);
//Post post = SelectPost(new Guid(id));
Post post = p.SelectPost(new Guid(id));
posts.Add(post);
}
foreach (BlogEngine.Core.Category item in p.FillCategories())
{
sql.InsertCategory(item);
}
foreach (BlogEngine.Core.Post item in posts)
{
BlogEngine.Core.Post post = item;
try
{
sql.InsertPost(post);
i++;
}
catch { }
}
List<BlogEngine.Core.Page> Pages = new List<BlogEngine.Core.Page>();
folder = Server.MapPath("~/app_data/pages/");
foreach (string file in System.IO.Directory.GetFiles(folder, "*.xml", SearchOption.TopDirectoryOnly))
{
FileInfo info = new FileInfo(file);
string id = info.Name.Replace(".xml", string.Empty);
//Post post = SelectPost(new Guid(id));
BlogEngine.Core.Page page = p.SelectPage(new Guid(id));
sql.InsertPage(page);
}
Response.Write(i);
}
</script>
同时上面的代码是通用的,有需要的朋友可以直接拿去使用。
数据转换成功后,更改web.config中的defaultProvider
运行时发现有很多的问题,
最多的是发生在这一段代码上
string sqlQuery = "SELECT PostID, Title, Description, PostContent, DateCreated, " +
"DateModified, Author, IsPublished, IsCommentEnabled, Raters, Rating, Slug " +
"FROM be_Posts " +
"WHERE PostID = @id";
SqlCommand cmd = new SqlCommand(sqlQuery, providerConn);
cmd.Parameters.Add(new SqlParameter("@id", id.ToString()));
SqlDataReader rdr = cmd.ExecuteReader();
//注意这里
post.Id = rdr.GetGuid(0);
post.Title = rdr.GetString(1);
没有进行SqlDataReader.Read()判断,当数据存在问题时这行就会报错
昨晚折腾不小,最终放弃了它自带的sqlprovider
想自己写一个,改一下FillPosts()方法,增加几个重载,如分页等。
这几个provider最大的问题是一次性将所有Posts载入内存,xmlProvider如此,sqlprovider也如此