我想用SQL Server數據庫做MailMerge作爲C#中的數據源。可能嗎?我搜索了幾天沒有任何有效的結果。有人可以向我提供任何有效的鏈接或解釋如何實現這一目標嗎?請幫助。提前致謝。MailMerge使用SQL服務器數據庫
回答
- 它可以連接到一個表或視圖,但你需要使用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
- 連接到一個典型的SP是另一個物。 Word用來做這件事的對象有一個錯誤,即AFAIK沒有被修復,也沒有很好的解決方法。對於一些細節,我所知道的唯一的建議,請參閱
http://social.msdn.microsoft.com/Forums/en-US/worddev/thread/272cf1a8-ea98-49a9-b05f-82cfec497a6a
謝謝你bibadiak你的寶貴答覆。像上面提到的那樣,我收到了錯誤「Record 1 Contained too few datafields」。我遵循了你給我的文章中提到的步驟,並且我在SQLStatement中使用了完整的數據庫模式。但是現在我收到錯誤「由於安全/密碼問題,Office無法打開您的文件,請檢查您的密碼是否正確」。我已經給出了正確的密碼。 – JosephJCKochi
1.在SQL Server 2000之後,我認爲我沒有得到任何不使用集成安全性的連接。我從來沒有發現問題出在哪裏,對不起。 2.你的連接字符串是什麼? 3.如果你有Excel,值得嘗試從Excel連接(這通常比較好)。如果可以的話,我們必須假設Word有問題。 – 2012-08-24 08:11:24
問題是我沒有得到數據源中的任何字段。我唯一得到的是M_和M_1。 – JosephJCKochi
我知道這是舊的,但我掙扎着試圖找出的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;
}
}
- 1. Sql數據庫服務器
- 2. ASP.NET/SQL服務器:SQL Server數據庫
- 3. 更改服務器的SQL數據庫
- 4. 數據庫引擎... SQL服務器2005
- 5. SQL服務器數據庫部署
- 6. SQL服務器:從所有數據庫
- 7. jQuery與SQL服務器數據庫html
- 8. SQL服務器:通過主數據庫
- 9. Sql服務器數據庫同步
- 10. Advantage數據庫或SQL服務器
- 11. SQL服務器數據庫備份
- 12. SQL服務器數據庫表性能
- 13. SQL服務器登錄錯誤遠程服務器數據庫
- 14. 服務器數據庫使用情況
- 15. 如何使用服務器數據庫?
- 16. php-mssql服務器數據庫連接使用wamp服務器
- 17. 將SQLite數據庫表發送到SQL服務器數據庫
- 18. SQL服務器腳本錯誤:數據庫已在使用
- 19. Grails使用遺留數據庫SQL服務器
- 20. 圖像存儲在SQL服務器數據庫使用java
- 21. 使用批量導入SQL服務器數據庫
- 22. 使用SMO檢索SQL服務器,數據庫,表信息
- 23. 使用BCP命令與SQL服務器本地數據庫
- 24. 在Sybase Advantage數據庫服務器中使用SQL Server Analysis Services
- 25. 使用SSIS將Access數據庫傳輸到SQL服務器
- 26. 使用SQL服務器數據庫的ASP網站的攻擊
- 27. Rails使用MS SQL服務器數據庫
- 28. 使用.bak複製SQL服務器數據庫
- 29. 使用Get Servers請求列出SQL數據庫服務器+ Restful服務
- 30. 用不同的服務器/數據庫執行SQL任務
郵件合併什麼? MS詞? –
是的。我必須合併從SQL服務器存儲過程返回的數據到MS字 – JosephJCKochi
我已經嘗試過的是微軟鏈接 http://support.microsoft.com/?kbid=301659。當我嘗試在CreateDataSource方法中給出連接字符串時,它會引發命令失敗錯誤 – JosephJCKochi