2013-08-26 38 views
0

我有一個HR Web應用程序,其中包含工作場所內的組織結構。 客戶端正在發送一個帶有工作單位名稱及其說明的.docx文件。我需要製作一個C#應用程序來從.docx文件獲取數據並使用它更新一些數據庫表。從.docx文件更新數據庫

我已經嘗試過.docx轉換爲XML,但我不知道如何從該XML獲取數據並將其插入到數據庫中。

是否有更簡單的方法直接從.docx文件更新此數據庫,或者我應該使用什麼機制來查找XML文件中的數據。

+0

http://stackoverflow.com/questions/8602737/how-will-i-extract-the-data-from-the-docx-file-using-documentformat-openxml-det是一個好開始 –

回答

0

試試這個..

enter image description here

下面是連接字符串到數據庫。您可以修改它以滿足你的

<connectionStrings> 
<add name="conString" connectionString="Data Source=.\SQLEXPRESS;database=dbFiles; Integrated Security=true"/> 
</connectionStrings > 

首先我添加了一個FileUpload控件,一個按鈕和一個標籤,以顯示消息

<asp:FileUpload ID="FileUpload1" runat="server" /> 
<asp:Button ID="btnUpload" runat="server" Text="Upload" 
OnClick="btnUpload_Click" /> 
<br /> 
<asp:Label ID="lblMessage" runat="server" Text="" 
Font-Names = "Arial"></asp:Label> 

這裏是被稱爲上上載片段按鈕單擊事件

C#

protected void btnUpload_Click(object sender, EventArgs e) 

{ 
    // Read the file and convert it to Byte Array 
    string filePath = FileUpload1.PostedFile.FileName; 
    string filename = Path.GetFileName(filePath); 
    string ext = Path.GetExtension(filename); 
    string contenttype = String.Empty; 

    //Set the contenttype based on File Extension 
    switch(ext) 
    { 
     case ".doc": 
      contenttype = "application/vnd.ms-word"; 
      break; 
     case ".docx": 
      contenttype = "application/vnd.ms-word"; 
      break; 
     case ".xls": 
      contenttype = "application/vnd.ms-excel"; 
      break; 
     case ".xlsx": 
      contenttype = "application/vnd.ms-excel"; 
      break; 
     case ".jpg": 
      contenttype = "image/jpg"; 
      break; 
     case ".png": 
      contenttype = "image/png"; 
      break; 
     case ".gif": 
      contenttype = "image/gif"; 
      break; 
     case ".pdf": 
      contenttype = "application/pdf"; 
      break; 
    } 
    if (contenttype != String.Empty) 
    { 

     Stream fs = FileUpload1.PostedFile.InputStream; 
     BinaryReader br = new BinaryReader(fs); 
     Byte[] bytes = br.ReadBytes((Int32)fs.Length); 

     //insert the file into database 
     string strQuery = "insert into tblFiles(Name, ContentType, Data)" + 
      " values (@Name, @ContentType, @Data)"; 
     SqlCommand cmd = new SqlCommand(strQuery); 
     cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename; 
     cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value 
      = contenttype; 
     cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes; 
     InsertUpdateData(cmd); 
     lblMessage.ForeColor = System.Drawing.Color.Green; 
     lblMessage.Text = "File Uploaded Successfully"; 
    } 
    else 
    { 
     lblMessage.ForeColor = System.Drawing.Color.Red; 
     lblMessage.Text = "File format not recognised." + 
      " Upload Image/Word/PDF/Excel formats"; 
    } 
} 

VB.Net

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As EventArgs) 
    ' Read the file and convert it to Byte Array 
    Dim filePath As String = FileUpload1.PostedFile.FileName 
    Dim filename As String = Path.GetFileName(filePath) 
    Dim ext As String = Path.GetExtension(filename) 
    Dim contenttype As String = String.Empty 

    'Set the contenttype based on File Extension 
    Select Case ext 
    Case ".doc" 
     contenttype = "application/vnd.ms-word" 
     Exit Select 
    Case ".docx" 
     contenttype = "application/vnd.ms-word" 
     Exit Select 
    Case ".xls" 
     contenttype = "application/vnd.ms-excel" 
     Exit Select 
    Case ".xlsx" 
     contenttype = "application/vnd.ms-excel" 
     Exit Select 
    Case ".jpg" 
     contenttype = "image/jpg" 
     Exit Select 
    Case ".png" 
     contenttype = "image/png" 
     Exit Select 
    Case ".gif" 
     contenttype = "image/gif" 
     Exit Select 
    Case ".pdf" 
     contenttype = "application/pdf" 
     Exit Select 
    End Select 
    If contenttype <> String.Empty Then 
     Dim fs As Stream = FileUpload1.PostedFile.InputStream 
     Dim br As New BinaryReader(fs) 
     Dim bytes As Byte() = br.ReadBytes(fs.Length) 

     'insert the file into database 
     Dim strQuery As String = "insert into tblFiles" _ 
     & "(Name, ContentType, Data)" _ 
     & " values (@Name, @ContentType, @Data)" 
     Dim cmd As New SqlCommand(strQuery) 
     cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename 
     cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value _ 
     = contenttype 
     cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes 
     InsertUpdateData(cmd) 
     lblMessage.ForeColor = System.Drawing.Color.Green 
     lblMessage.Text = "File Uploaded Successfully" 
    Else 
     lblMessage.ForeColor = System.Drawing.Color.Red 
     lblMessage.Text = "File format not recognised." _ 
     & " Upload Image/Word/PDF/Excel formats" 
    End If 
    End Sub 

上面的代碼簡單地讀出上載的文件作爲流,然後使用轉換二進制讀取流以字節數組和InsertUpdateData方法執行,則最後的字節數組被保存到數據庫中查詢將數據保存在數據庫

的InsertUpdateData功能如下

C#

給出
private Boolean InsertUpdateData(SqlCommand cmd) 
{ 
    String strConnString = System.Configuration.ConfigurationManager 
    .ConnectionStrings["conString"].ConnectionString; 
    SqlConnection con = new SqlConnection(strConnString); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = con; 
    try 
    { 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
     return false; 
    } 
    finally 
    { 
     con.Close(); 
     con.Dispose(); 
    } 
} 
+1

儘可能多因爲我可以理解你爲OP提供詳細答案所付出的努力,但這並沒有回答他或她的問題:將docx全部上傳到數據庫並從docx中提取數據並將該數據插入到數據庫中兩個完全不同的東西。 –