我想创建一个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)”
我在这里做错了什么?
答案 0 :(得分:1)
OpenDataSource需要更多参数,即Connection字符串是第12个参数,而SQL Statement参数是第13个参数。由于所有参数都在C#中定义为“对象”,并且最近有足够的C#,编译器应该接受3个参数,但是在运行时COM期望第2个参数是Format,依此类推。因此,您需要做的第一件事是使用命名参数(如果您的C#版本支持该参数)或提供缺少的参数并在正确的位置获取连接和sqlstatement参数。
除此之外,如果连接字符串和SQL语句在Word之外正常工作,您几乎肯定会遇到Word中的其他问题,例如。
对于ODBC连接,肯定是名称设置为“”的连接,Word通常希望您将Subtype参数的值设置为wdMergeSubtypeWord2000(请检查该名称!)。
即使您拥有的SQL没有任何问题,但在某些情况下,如果您没有“引用”表名,则会出现Word对象,例如:使用Select * from“tiblMerge”
通过OpenDataSource使用ODBC驱动程序时,任何具有Unicode字符串数据类型(NVARCHAR,NCHAR等)的列都将返回空白/ null。
由于Unicode的问题,作为Word的一般规则,目前最好尝试使用OLE DB提供程序,尽管微软已宣布ODBC将成为其未来的SQL Server连接标准。要使用OLE DB,Name参数必须是带有所有相关连接信息的合适的.odc文件,或者它可以指定一个空的.odc文件,您可以提供连接信息。在Connection参数中。