最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#實(shí)現(xiàn)將Word?轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫并進(jìn)行管理

 更新時(shí)間:2024年03月25日 08:40:32   作者:初九之潛龍勿用  
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)將Word?轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫并進(jìn)行管理,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下

功能需求

將 WORD 文件的二進(jìn)制信息存儲(chǔ)到數(shù)據(jù)庫里,即方便了統(tǒng)一管理文件,又可以實(shí)行權(quán)限控制效果,此外,將 WORD 文件轉(zhuǎn)化為文本存儲(chǔ),可以進(jìn)一步實(shí)現(xiàn)對(duì)已存儲(chǔ)文件的全文檢索。 在應(yīng)用項(xiàng)目里,我們將實(shí)現(xiàn)如下需求:

1、上傳WORD文件,獲取二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù)。

2、將二進(jìn)制數(shù)據(jù)和文本數(shù)據(jù)保存到數(shù)據(jù)表中。

3、查詢需要的數(shù)據(jù)文件,可提供下載功能。

范例運(yùn)行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

操作系統(tǒng)上安裝 Office Word 2016

數(shù)據(jù)庫:Microsoft SQL Server 2016

.net版本: .netFramework4.7.1 或以上

開發(fā)工具:VS2019  C#

設(shè)計(jì)數(shù)據(jù)表

打開 Microsoft SQL Server 2016 查詢分析器,執(zhí)行如下代碼創(chuàng)建表:

代碼片斷如下: 

CREATE TABLE [dbo].[f_words](
    [cid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [filename] [nvarchar](100) NOT NULL,
    [bfile] [image] NULL,
    [fcontent] [nvarchar](max) NULL,
    [sys_instime] [datetime] NULL,
 CONSTRAINT [PK_f_words] PRIMARY KEY CLUSTERED 
(
    [cid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
 
ALTER TABLE [dbo].[f_words] ADD  CONSTRAINT [DF_f_words_cid]  DEFAULT (newid()) FOR [cid]
GO

創(chuàng)建成功后,右擊f_words表,點(diǎn)擊設(shè)計(jì),呈現(xiàn)視圖如下:

如圖字段CID為唯一標(biāo)識(shí);filename存儲(chǔ)上傳時(shí)獲取的文件名;bfile存儲(chǔ)Word文件的二進(jìn)制數(shù)據(jù);fcontent存儲(chǔ)WORD文件的文本轉(zhuǎn)化信息;sys_instime存儲(chǔ)添加的時(shí)間。 

關(guān)鍵代碼

組件庫引入

Word文件內(nèi)容轉(zhuǎn)文本

public string getWordTxt(string _filename,bool getHtmlContent) 方法,參數(shù)1 傳入要讀取的 WORD 文件路徑,參數(shù)2 設(shè)定是否獲取HTML格式的文本。

public string getWordTxt(string _filename,bool getHtmlContent)
        {
            resultReport = "";
            Object Nothing = System.Reflection.Missing.Value;
 
            object filename = _filename;
            //創(chuàng)建一個(gè)名為WordApp的組件對(duì)象
            DateTime beforetime = DateTime.Now;
            Word.Application WordApp = new Word.Application();
            //創(chuàng)建一個(gè)名為WordDoc的文檔對(duì)象
            WordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
 
            Word.Document WordDoc = WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
 
            WordDoc.SpellingChecked = false;//關(guān)閉拼寫檢查
 
            WordDoc.ShowSpellingErrors = false;//關(guān)閉顯示拼寫錯(cuò)誤提示框
 
            DateTime aftertime = DateTime.Now;
 
            string rv = WordDoc.Content.Text;
            Sys_Custom_DocVar = "";
            Sys_Custom_DocVar2 = "";
            foreach (Word.Variable ov in WordDoc.Variables)
            {
                if (ov.Name == "sys_custom_docvar")
                {
                    //                    WordDoc.Content.Text = ov.Value;
                    Sys_Custom_DocVar = ov.Value;
                } else if (ov.Name == "sys_custom_docvar2")
                {
                    //                    WordDoc.Content.Text = ov.Value;
                    Sys_Custom_DocVar2 = ov.Value;
                }
            }
            foreach (Word.ContentControl cc in WordDoc.ContentControls)
            {
                resultReport += cc.ID + ":" + cc.Tag + "<br>";
 
            }
            string _path = Path.GetDirectoryName(_filename) + "\\";
 
            object _expFile = _path + Guid.NewGuid().ToString() + ".html";
            if (getHtmlContent == true)
            {
                object   wsf = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;
                WordDoc.SaveAs2(ref _expFile,ref wsf, ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);
            }
            WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
            //關(guān)閉WordApp組件對(duì)象
            WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
 
            KillProcessByStartTime("WINWORD",beforetime,aftertime);
 
            if (File.Exists(_expFile.ToString()) == true)
            {
                FileEx fe = new FileEx();
                rv = fe.LoadFromFile(_expFile.ToString(), Encoding.Default);
                File.Delete(_expFile.ToString());
            }
            return rv;
        }
 
public string KillProcessByStartTime(string processName,DateTime beforetime,DateTime aftertime)
        {
            Process[] ps = Process.GetProcesses();
            foreach (Process p in ps)  
            {
                if(p.ProcessName.ToUpper()!=processName) continue;
                if(p.StartTime > beforetime && p.StartTime < aftertime)
                {
                    try
                    {
                        p.Kill();
                    }
                    catch(Exception e)
                    {
                        return e.Message;
                    }
                }
            }  
            return "";
        }

上傳及保存舉例

本示例是獲取上傳的文件并保存,將保存后的文件獲取二進(jìn)制及文本數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中。

示例代碼如下:

string filename = Request.PhysicalApplicationPath + "\\app_data\\" + Guid.NewGuid().ToString() + ".docx";  //預(yù)生成文件名
//File1為上傳控件
File1.PostedFile.SaveAs(filename);  //保存文件
 
//添加SQL參數(shù),此處僅為示例
ArrayList paras = new ArrayList();
paras.Add(new SqlParameter("filename", filename));
paras.Add(new SqlParameter("fcontent", getWordTxt(filename,false)));  //word轉(zhuǎn)文本
paras.Add(new SqlParameter("bfile", GetBinaryData(filename)));  //word的二進(jìn)制信息
paras.Add(new SqlParameter("sys_instime", System.DateTime.Now));
 
File.Delete(filename);
 
//保存到數(shù)據(jù)表
ExecDbScripts("INSERT INTO [f_words]([filename],[bfile],[fcontent],[sys_instime])  VALUES(@filename, @bfile,@fcontent,@sys_instime)", paras);
得到文件Byte[]數(shù)據(jù)方法
public byte[] GetBinaryData(string filename)
{
    if(!File.Exists(filename))
    {
        return null;
    }
    FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
    byte[] imageData = new Byte[fs.Length];
    fs.Read( imageData, 0,Convert.ToInt32(fs.Length));
    fs.Close();
    return imageData;
}        

查詢并下載Word文件

我們可以通過 select filename from f_words where fcontent like '%key%' 等語句形式進(jìn)行查詢結(jié)果,對(duì)于結(jié)果中的數(shù)據(jù)我們可以通過傳遞CID唯一標(biāo)識(shí)參數(shù),定位二進(jìn)制信息進(jìn)行下載,示例代碼如下:

 
  string strConn =ConfigurationSettings.AppSettings["Connection"];
  SqlConnection Conn = new SqlConnection(strConn );
  SqlCommand Cmd = new SqlCommand();
 
  Cmd.Connection = Conn;
 
  SqlDataReader myDr;
 
  Cmd.CommandText = " select filename from f_words where  cid=@cid ";
   
 
  SqlParameter   para2=new   SqlParameter("@cid",SqlDbType.UniqueIdentifier);
  para2.Value=(new Guid(_cid));
  Cmd.Parameters.Add(para2);
  try
  {
             Conn.Open();
             myDr = Cmd.ExecuteReader();
             bool _hasrows=myDr.HasRows;
             if (myDr.Read())
             {
 
                 string extendname = "docx";
 
                 byte[] bytes = (byte[])myDr["bfile"];
                 
                 
                 Response.Buffer = true;
                 Response.Charset = "utf-8";
                 Response.AppendHeader("Content-Disposition", "inline;filename=" + HttpUtility.UrlEncode(myDr["filename"].ToString() + "" + extendname)); //把 attachment 改為 online 則在線打開
                 Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
                 Response.AppendHeader("Content-Length", bytes.Length.ToString());
                 Response.ContentType = "application/octet-stream"; 
                 
                     Page.EnableViewState = false;
                     Response.BinaryWrite(bytes);
                     Response.Flush();
             }
             myDr.Close();
         }
         catch (SqlException ex)
         {
         }
         finally
         {
             Conn.Close();
             Conn.Dispose();
         }
}

總結(jié)

上傳保存到數(shù)據(jù)庫的代碼僅供參考,添加參數(shù)僅為抽象調(diào)用,需要自行實(shí)現(xiàn)數(shù)據(jù)操作代碼。

下載大尺寸文件使用 Response.BinaryWrite() 方法可能會(huì)使瀏覽器無響應(yīng),可考慮使用 bytes.Length  判斷如果尺寸較大的話,則生成文件到服務(wù)器并提供URL下載鏈接的方法。

以上就是使用C#實(shí)現(xiàn)將Word 轉(zhuǎn)文本存儲(chǔ)到數(shù)據(jù)庫并進(jìn)行管理的詳細(xì)內(nèi)容,更多關(guān)于C# Word 轉(zhuǎn)文本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#各種正則表達(dá)式驗(yàn)證方法整理大全

    C#各種正則表達(dá)式驗(yàn)證方法整理大全

    許多編程語言和工具都包含對(duì)正則表達(dá)式的支持,C#也不例外,這篇文章主要給大家介紹了關(guān)于C#各種正則表達(dá)式驗(yàn)證方法整理大全的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • C#將List轉(zhuǎn)換為只讀的List方法與技巧

    C#將List轉(zhuǎn)換為只讀的List方法與技巧

    在 C# 編程的廣闊世界里,數(shù)據(jù)的安全性與穩(wěn)定性始終是我們關(guān)注的焦點(diǎn),當(dāng)涉及到集合數(shù)據(jù)的處理時(shí),有時(shí)我們會(huì)面臨這樣一個(gè)關(guān)鍵需求:將List轉(zhuǎn)換為只讀的List,所以本文給大家介紹了使用C#將List轉(zhuǎn)換為只讀的List的方法與技巧,需要的朋友可以參考下
    2025-01-01
  • 基于C#設(shè)計(jì)一個(gè)雙色球選號(hào)工具

    基于C#設(shè)計(jì)一個(gè)雙色球選號(hào)工具

    這篇文章主要為大家詳細(xì)介紹了如何利用C#設(shè)計(jì)實(shí)現(xiàn)一個(gè)雙色球選號(hào)工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • C#拆分字符串正則表達(dá)式Regex.Split和String.Split方法

    C#拆分字符串正則表達(dá)式Regex.Split和String.Split方法

    這篇文章主要給大家介紹了關(guān)于C#拆分字符串正則表達(dá)式Regex.Split和String.Split方法的相關(guān)資料,在C#中,Regex.Split方法和string.Split方法都用于分割字符串,但它們有一些重要的區(qū)別,文中通過代碼詳細(xì)講解下,需要的朋友可以參考下
    2024-04-04
  • C#中BackgroundWorker類用法總結(jié)

    C#中BackgroundWorker類用法總結(jié)

    本文詳細(xì)講解了C#中BackgroundWorker類用法總結(jié),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C# DataGridView綁定數(shù)據(jù)源的方法

    C# DataGridView綁定數(shù)據(jù)源的方法

    這篇文章主要為大家詳細(xì)介紹了C# DataGridView綁定數(shù)據(jù)源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C#中Kestrel和IIS服務(wù)器下的同步與異步配置

    C#中Kestrel和IIS服務(wù)器下的同步與異步配置

    本篇文章主要講解什么是Kestrel和IIS服務(wù)器和特點(diǎn),以及他們?nèi)绾闻渲猛脚c異步,具有一定的參加價(jià)值,感興趣的可以了解一下
    2023-08-08
  • C#四舍五入MidpointRounding.AwayFromZero解析

    C#四舍五入MidpointRounding.AwayFromZero解析

    這篇文章主要介紹了C#四舍五入MidpointRounding.AwayFromZero,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    C# 正則表達(dá)式常用的符號(hào)和模式解析(最新推薦)

    這篇文章主要介紹了C# 正則表達(dá)式常用的符號(hào)和模式解析,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果

    C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換效果

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)鼠標(biāo)左右鍵切換功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12

最新評(píng)論

长白| 通城县| 康定县| 太白县| 南投县| 宾阳县| 柯坪县| 阳新县| 乳山市| 商南县| 肇东市| 井陉县| 寿光市| 特克斯县| 成都市| 河津市| 丹棱县| 建德市| 巴彦县| 应城市| 安阳市| 烟台市| 樟树市| 临安市| 沅陵县| 施秉县| 万年县| 霍城县| 会东县| 金坛市| 壶关县| 岑巩县| 汽车| 理塘县| 新源县| 大悟县| 玉屏| 大埔县| 五大连池市| 图木舒克市| 沭阳县|