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 番目のパラメーターであり、SQL ステートメント パラメーターは 13 番目です。C# ではすべてのパラメーターが「オブジェクト」として定義されているため、最新の C# では、コンパイラーは 3 つのパラメーターを受け入れる必要がありますが、実行時に COM は 2 番目のパラメーターが Format であると想定します。したがって、最初に行う必要があるのは、名前付きパラメーターを使用するか (C# のバージョンがサポートしている場合)、不足しているパラメーターを指定して、接続パラメーターと sqlstatement パラメーターを適切な場所で取得することです。

さらに、接続文字列と SQL ステートメントが Word の外部で問題なく動作する場合、Word でさらに問題が発生することはほぼ確実です。

ODBC 接続の場合、確かに Name が "" に設定されている場合、Word は通常、Subtype パラメータの値を wdMergeSubtypeWord2000 に設定することを想定しています (その名前を確認してください!)。

使用している SQL に問題はありませんが、場合によっては、Select * from "tiblMerge" を使用して、テーブル名を "引用" しないと Word オブジェクトになります。

OpenDataSource 経由で ODBC ドライバーを使用する場合、Unicode 文字列データ型 (NVARCHAR、NCHAR など) の列は空白/null を返します。

Unicode の問題のため、Microsoft は ODBC が SQL Server の将来の接続標準になると発表しているにもかかわらず、Word の一般的なルールとして、現時点では OLE DB プロバイダーを使用することをお勧めします。OLE DB を使用するには、Name パラメーターは、関連するすべての接続情報を含む適切な .odc ファイルである必要があります。または、空の .odc ファイルを指定して、接続情報を提供することもできます。接続パラメータで。

于 2013-11-01T18:14:32.930 に答える