2013-10-31 45 views
0

我想創建一個MS Word合併文檔。我已經創建了一個模板文檔。當我的應用程序啓動時,它會創建一個名爲「Hrms2008」的ODBC。我對這類東西很陌生,這就是爲什麼我不知道是什麼原因導致錯誤的原因。函數「OpenDataSource」被調用時出錯

word.Application wrdApp; 
       word.Document wrdDoc; 

       object oMissing = System.Reflection.Missing.Value; 
       object oName = "DSN=Hrms2008;DATABASE=Pitshrms4002;Integrated Security = True;"; 
       object oSQL = "Select * from tiblMerge"; 
       object oTemplate = briefNieuw.Brief; 

       wrdApp = new word.Application(); 
       wrdApp.Visible = true; 

       wrdDoc = wrdApp.Documents.Add(ref oTemplate,ref oMissing,ref oMissing,ref oMissing); 

       wrdDoc.MailMerge.MainDocumentType = word.WdMailMergeMainDocType.wdFormLetters; 
       wrdDoc.MailMerge.OpenDataSource("", oName, oSQL); 

我得到的錯誤: 「類型不匹配異常來自HRESULT:0X80020005(DISP_ETYPEMISMATCH)」

我在做什麼錯在這裏?

+0

你得到的錯誤是什麼? 你可以在應用程序之外使用該連接字符串進行連接嗎? 你確定表名以tibl-而不是tbl-開頭嗎? – CompuChip

+0

我在我的問題中添加了錯誤消息。謝謝。 –

回答

1

OpenDataSource需要更多參數,即Connection字符串是第12個參數,SQL Statement參數是第13個參數。由於所有參數在C#中都被定義爲「object」,因此使用最新的C#編譯器應該接受3個參數,但是在運行時COM期望第二個參數是Format,依此類推。因此,您需要做的第一件事是使用命名參數(如果您的C#版本支持該參數),或者提供缺少的參數並在正確位置獲取連接和sqlstatement參數。除此之外,如果連接字符串和SQL語句在Word外工作正常,那麼在Word中幾乎肯定會遇到更多問題,例如,

對於ODBC連接,肯定是一個名稱設置爲「」的Word,Word通常希望您將子類型參數的值設置爲wdMergeSubtypeWord2000(請檢查該名稱!)。

即使您的SQL沒有錯誤,但在某些情況下,如果您沒有「引用」表名稱的話,Word對象也是如此。使用Select * from「tiblMerge」

通過OpenDataSource使用ODBC驅動程序時,任何具有Unicode字符串數據類型(NVARCHAR,NCHAR等)的列都將返回空白/空值。

由於Unicode的問題,作爲Word的一般規則,儘管事實上Microsoft已宣佈ODBC將成爲其未來的SQL Server連接標準,但嘗試使用OLE DB提供程序目前更好。要使用OLE DB,Name參數需要適合具有所有相關連接信息的.odc文件,或者可以指定一個空的.odc文件,並且您可以提供連接信息。在Connection參數中。