簡體   English   中英

將文本從文件導入NVARCHAR(MAX)列; 字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM