C# 使用Microsoft Office Interop word在MySql数据库中插入word文件的内容

C# 使用Microsoft Office Interop word在MySql数据库中插入word文件的内容,c#,mysql,ms-word,office-interop,C#,Mysql,Ms Word,Office Interop,我想逐行阅读.docx文件,并在MySql数据库表中插入章节和段落 我试着用它来阅读这份文件 My file.docx分为章节和段落 file.docx的结构 Chapter 1 - Events -alert or disservices -significant activities Chapter 2 – Safety -near miss -security checks Chapter 3 – Training -environment -upkeep 在调试visual stu

我想逐行阅读.docx文件,并在MySql数据库表中插入章节和段落

我试着用它来阅读这份文件

My file.docx分为章节和段落

file.docx的结构

Chapter 1 - Events
-alert or disservices
-significant activities

Chapter 2 – Safety
-near miss
-security checks

Chapter 3 – Training
-environment
-upkeep
在调试visual studio上正确阅读了整个文档

现在我尝试根据这个模式在MySql数据库表上插入

但在MySql数据库表中,我有这些行,也就是说,在每一行中插入整个文档,而不区分章节和段落

如何解决这个问题

提前感谢您的帮助或建议

下面是我的代码和表格结构章节

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Application word = new Application();
        object miss = Missing.Value;
        object path = @"C:\Users\file.docx";
        object readOnly = true;
        Document docs = word.Documents.Open(ref path, ref miss, ref readOnly, ref miss, ref miss,
                                            ref miss, ref miss, ref miss, ref miss, ref miss, ref miss,
                                            ref miss, ref miss, ref miss, ref miss, ref miss);

        string totaltext = "";      //the whole document

        var ran = docs.Content;

        for (int i = 0; i < docs.Paragraphs.Count; i++)
        {
            var chap = ran.Text;
            var subhead = ran.Text;
            var contents = ran.Text;

            string constr = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
            string strSql = @"INSERT INTO Chapters (chapter, subheading, contents) VALUES (?, ?, ?);";

            using (MySqlConnection conn = 
                new MySqlConnection(constr))
            {
                conn.Open();

                using (MySqlCommand cmd = 
                    new MySqlCommand(strSql, conn))
                {
                    cmd.Parameters.AddWithValue("param1", chap);
                    cmd.Parameters.AddWithValue("param2", subhead);
                    cmd.Parameters.AddWithValue("param3", contents);
                    cmd.ExecuteNonQuery();
                }

                conn.Close();
            }

            totaltext += docs.Paragraphs[i + 1].Range.Text.ToString() + "<br />";
        }

        Response.Write(totaltext);
        docs.Close();
        word.Quit();
    }
}

DROP TABLE IF EXISTS `chapters`;
CREATE TABLE `chapters` (
  `chapter` longtext CHARACTER SET utf8 COLLATE utf8_general_ci,
  `subheading` longtext CHARACTER SET utf8 COLLATE utf8_general_ci,
  `contents` longtext CHARACTER SET utf8 COLLATE utf8_general_ci,
  `sID` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`sID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
应用程序word=新应用程序();
对象未命中=缺少.Value;
对象路径=@“C:\Users\file.docx”;
对象只读=真;
文档文档=word.Documents.Open(参考路径、参考未命中、参考只读、参考未命中、参考未命中、,
裁判失误,裁判失误,裁判失误,裁判失误,裁判失误,裁判失误,裁判失误,
参考未命中,参考未命中,参考未命中,参考未命中,参考未命中);
字符串totaltext=“;//整个文档
var ran=docs.Content;
对于(int i=0;i”;
}
响应。写入(totaltext);
docs.Close();
word.Quit();
}
}
如果存在“章节”,则删除表格;
创建表“章节”(
`第章“长文本字符集utf8对比utf8\u常规\u ci”,
`副标题`长文本字符集utf8对照utf8\U常规\U ci,
`内容`长文本字符集utf8对照utf8\U常规\U ci,
`sID`int(11)非空自动增量,
主键(`sID`)
)ENGINE=InnoDB默认字符集=utf8;
此代码错误:

var ran=docs.Content;
对于(int i=0;i
您正在对文档的全部内容设置
ran
,然后将其复制到
chap
副标题
、和
内容
变量(用于将每一行插入数据库)


您需要将
章节
分标题
内容
设置为不同的值(基于当前段落?)每次你在数据库中插入一行。

谢谢你的回复。如何根据当前段落将chap、subhead和Content设置为不同的值?@ChevyMarkSunderland我不知道;我不熟悉DOM这个词。(我为
mysql
标记阅读了这个问题。)你可能想编辑掉不相关的细节(也就是说,所有MySQL的东西),重新聚焦于将内容分成你想要的三个部分,并用
[ms word]
标记它,以引起能够回答它的人的注意。好的,我在问题中插入了标记
[ms word]
office interop