[英]Importing text from file into a NVARCHAR(MAX) column; getting � for characters
我們正在將文章內容從文件移到content_articles表的NVARCHAR(MAX)列中。 通過簡單的存儲過程插入內容:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[UpdateArticleContent]
@ArticleID VARCHAR(50),
@ArticleText NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
UPDATE content_article
SET article_content = @ArticleText
WHERE article_id = @ArticleID
END
GO
可以在此處找到獲取文章文件,文本然后調用存儲過程的函數:
private void LoadButton_Click(object sender, EventArgs e)
{
var dbSelected = ServerDropDown.SelectedItem.ToString();
if (String.IsNullOrWhiteSpace(dbSelected))
{
OutputTextBox.Text = "Cannnot reach db.";
}
else
{
var sb = new StringBuilder();
var articlesConvertedPath = string.Format(@"{0}\ArticlesConverted", FolderPathTextBox.Text);
var articlesConvertedDir = new DirectoryInfo(articlesConvertedPath);
var articlesConvertedFiles = articlesConvertedDir.GetFiles();
var articlesConvertedNames = articlesConvertedFiles.Select(x => x.Name).ToList();
var dirInfo = new DirectoryInfo(FolderPathTextBox.Text);
var sqlConnectionString = ConfigurationManager.ConnectionStrings[dbSelected].ConnectionString;
var con = new SqlConnection(sqlConnectionString);
con.Open();
foreach (var currFile in dirInfo.GetFiles().Where(x => !articlesConvertedNames.Contains(x.Name)))
{
sb.AppendLine(currFile.Name.Replace(".asp", string.Empty));
using (StreamReader sr = new StreamReader(currFile.FullName))
{
var articleText = sr.ReadToEnd()
.Replace("<!--#include file=\"../include/engine_article_header.asp\"-->", string.Empty)
.Replace("<!--#include file=\"../include/engine_article_footer.asp\"-->", string.Empty)
.Replace("<img src=\"", "<img src=\"http://www.oandp.com/");
using (SqlCommand command = new SqlCommand("UpdateArticleContent", con))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@ArticleID", SqlDbType.VarChar).Value = currFile.Name.Replace(".asp", string.Empty);
command.Parameters.Add("@ArticleText", SqlDbType.NVarChar, -1).Value = articleText;
command.ExecuteNonQuery();
}
}
var copyFilePath = string.Format(@"{0}\{1}", articlesConvertedPath, currFile.Name);
if (File.Exists(copyFilePath))
{
File.Delete(copyFilePath);
File.Copy(currFile.FullName, copyFilePath);
}
else
{
File.Copy(currFile.FullName, copyFilePath);
}
}
con.Close();
sb.AppendLine("Finished!");
OutputTextBox.Text = sb.ToString();
}
}
它采用最簡單的字符(例如破折號或引號)制成。
我不知道我在做什么錯,這似乎很簡單。
小花絮:運行SQL Server 2008 R2
有誰知道為什么使用以上信息替換非字母數字字符?
你們為我指明了正確的方向。 我在StreamReader中要做的只是Encoding.Default。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.