2012-08-22 132 views
1

我想用SQL Server數據庫做MailMerge作爲C#中的數據源。可能嗎?我搜索了幾天沒有任何有效的結果。有人可以向我提供任何有效的鏈接或解釋如何實現這一目標嗎?請幫助。提前致謝。MailMerge使用SQL服務器數據庫

+0

郵件合併什麼? MS詞? –

+0

是的。我必須合併從SQL服務器存儲過程返回的數據到MS字 – JosephJCKochi

+0

我已經嘗試過的是微軟鏈接 http://support.microsoft.com/?kbid=301659。當我嘗試在CreateDataSource方法中給出連接字符串時,它會引發命令失敗錯誤 – JosephJCKochi

回答

0
  1. 它可以連接到一個表或視圖,但你需要使用OpenDataSource(沒有的createDataSource),提供合適的.odc路徑/文件名(你在Word中手動創建)作爲名稱參數,以及SQLStatement中合適的SQL查詢。這給你一個OLE DB連接。您可以連接vie ODBC,但通信鏈中的某些內容不會正確執行Unicode內容,這意味着不會返回NVARCHAR和其他「N」類型。只要您提供所有連接信息,就可以使用空的.odc。您需要在通話中,例如(在VBA)

ActiveDocument.MailMerge.OpenDataSource _

Name:="c:\myodcs\empty.odc", _ 
Connection:="Provider=SQLOLEDB.1;Integrated Security=SSPI;" & _ 
"Persist Security Info=False;Initial Catalog=mydb;Data Source=myserver;" _ 
SQLSatatement:="SELECT * FROM [mytable]", _ 
SubType:=wdMergeSubTypeOther 

其中 「MYSERVER」 是運行SQL Server數據庫的服務器的名稱, 「mydb的」 是數據庫的名稱你想要訪問並且「mytable」是要從中檢索數據的表或視圖 。

使用舊的SQL Server客戶端。您至少需要將提供者名稱更改爲使用新名稱。

您可能會或可能不會有資格與數據庫/目錄名錶名,你可能要考慮下面的文章中:

http://support.microsoft.com/kb/918295

  1. 連接到一個典型的SP是另一個物。 Word用來做這件事的對象有一個錯誤,即AFAIK沒有被修復,也沒有很好的解決方法。對於一些細節,我所知道的唯一的建議,請參閱

http://social.msdn.microsoft.com/Forums/en-US/worddev/thread/272cf1a8-ea98-49a9-b05f-82cfec497a6a

+0

謝謝你bibadiak你的寶貴答覆。像上面提到的那樣,我收到了錯誤「Record 1 Contained too few datafields」。我遵循了你給我的文章中提到的步驟,並且我在SQLStatement中使用了完整的數據庫模式。但是現在我收到錯誤「由於安全/密碼問題,Office無法打開您的文件,請檢查您的密碼是否正確」。我已經給出了正確的密碼。 – JosephJCKochi

+0

1.在SQL Server 2000之後,我認爲我沒有得到任何不使用集成安全性的連接。我從來沒有發現問題出在哪裏,對不起。 2.你的連接字符串是什麼? 3.如果你有Excel,值得嘗試從Excel連接(這通常比較好)。如果可以的話,我們必須假設Word有問題。 – 2012-08-24 08:11:24

+0

問題是我沒有得到數據源中的任何字段。我唯一得到的是M_和M_1。 – JosephJCKochi

0

我知道這是舊的,但我掙扎着試圖找出的Word 2013和新的解決方案。我想出了使用參數來過濾數據。在Microsoft Word中使用.odc連接(Office Data Connection)比舊的傳遞參數方法更容易。

第1步:創建一個Word表單以備後用。在Microsoft Word 2013或更高版本中,單擊郵件功能區選項卡,然後下拉選擇收件人並選擇使用現有連接,然後選擇現有的odc文件或單擊新建源。如果您正在設置一個新源,請按照嚮導進行操作。使用「插入合併字段」將數據字段添加到文檔中,創建字母,表單,標籤...。完成後保存文檔。如果可能的話使用集成安全。請注意,它們通常存儲在C:\ Users \\ Documents \ My Data Sources中。

在我的情況下,我有一個視圖(vAppointment)的字段AppointmentID,FirstName和LastName。在文檔中,我將字段添加到word文檔中以驗證它是否有效。如果我生成郵件合併,它將填充所有數據。

第2步:在C#項目中,連接以下函數並更改word文檔和odc文件的路徑。您還需要更新QueryString以反映您的數據:

public void RunMailMerge() 
    { 
     try 
     { 
      object isTrue = true; 
      object notTrue = false; 

      Microsoft.Office.Interop.Word.Document wordDoc = new Microsoft.Office.Interop.Word.Document(); 
      Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application(); 
      string filename = @"C:\<path>\<the file you created>.docx"; 
      wordDoc = wordApp.Documents.Add(Template: filename); 
      wordApp.Visible = true; 

      object format = Microsoft.Office.Interop.Word.WdOpenFormat.wdOpenFormatAuto; 

      wordDoc.MailMerge.OpenDataSource(@"C:\Users\<username>\Documents\My Data Sources\<your connection file>.odc", 
         ref format, 
         ref notTrue, // ConfirmConversion 
         ref isTrue  // Set as ReadOnly so the user can't overwrite the document 
        ); 
      // Check the QueryString to see what is already there, add your parameters as needed. In my case I added "WHERE AppointmentID = 4" 
      wordDoc.MailMerge.DataSource.QueryString = "SELECT * FROM \"vAppointment\" WHERE AppointmentID = 4"; 
      wordDoc.MailMerge.Execute(ref notTrue); 
     } 
     catch (Exception ex) 
     { 
      string t = ex.Message; 
      string s = ex.StackTrace; 
      string msg = t + Environment.NewLine + s; 
     } 
    }