0

我想创建一个 MS Word 合并文档。我已经创建了一个模板文档。当我的应用程序启动时,它会创建一个名为“Hrms2008”的 ODBC。我是这种东西的新手,这就是为什么我不知道是什么导致了错误。

  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)”

我在这里做错了什么?

4

1 回答 1

1

OpenDataSource 需要更多的参数,即第 12 个参数是连接字符串,第 13 个是 SQL 语句参数。由于所有参数在 C# 中都定义为“对象”,对于最近的 C#,编译器应该接受 3 个参数,但在运行时 COM 期望第二个参数是 Format,依此类推。因此,您需要做的第一件事是使用命名参数(如果您的 C# 版本支持)或提供缺少的参数并在正确的位置获取连接和 sqlstatement 参数。

除此之外,如果连接字符串和 SQL 语句在 Word 之外工作正常,您几乎肯定会在 Word 中遇到更多问题,例如

对于 ODBC 连接,当然是名称设置为“”的连接,Word 通常希望您将 Subtype 参数的值设置为 wdMergeSubtypeWord2000(请检查该名称!)。

即使您拥有的 SQL 没有任何问题,但在某些情况下,如果您不“引用”表名,则 Word 对象,例如使用 Select * from "tiblMerge"

通过 OpenDataSource 使用 ODBC 驱动程序时,任何具有 Unicode 字符串数据类型(NVARCHAR、NCHAR 等)的列都将返回空白/空值。

由于 Unicode 的问题,作为 Word 的一般规则,目前最好尝试使用 OLE DB 提供程序,尽管 Microsoft 已宣布 ODBC 将成为其未来的 SQL Server 连接标准。要使用 OLE DB,Name 参数需要是包含所有相关连接信息的合适 .odc 文件,或者它可以指定一个空的 .odc 文件,您可以提供连接信息。在连接参数中。

于 2013-11-01T18:14:32.930 回答