2013-10-31 6 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

오류는 무엇입니까? 응용 프로그램 외부에서 해당 연결 문자열을 사용하여 연결할 수 있습니까? 테이블 이름이 tbl- 대신 tibl-로 시작 하시겠습니까? – CompuChip

+0

내 질문에 오류 메시지를 추가했습니다. 감사. –

답변

1

OpenDataSource는 더 많은 매개 변수를 필요로합니다. 즉, 연결 문자열은 12 번째 매개 변수이고 SQL 문 매개 변수는 13 번째입니다. C#에서는 모든 매개 변수가 "개체"로 정의되었으므로 최신 C#을 사용하면 컴파일러에서 3 개의 매개 변수를 받아야하지만 런타임에 COM에서 두 번째 매개 변수가 Format 등으로 간주됩니다. 따라서 가장 먼저해야 할 일은 명명 된 매개 변수 (C# 버전이 지원하는 경우)를 사용하거나 누락 된 매개 변수를 제공하고 올바른 위치에 연결 및 sqlstatement 매개 변수를 가져 오는 것입니다.

그 외에도 Word 외부에서 연결 문자열과 SQL 문이 정상적으로 작동하면 Word에 다음과 같은 문제가 발생합니다.

ODBC 연결의 경우 Name이 ""로 설정되어있는 경우 반드시 Word에서 일반적으로 Subtype 매개 변수의 값을 wdMergeSubtypeWord2000으로 설정해야합니다 (이름을 확인하십시오!).

SQL에 문제가 없더라도 테이블 이름을 "인용"하지 않으면 Word 개체가 표시되는 경우가 있습니다 (예 : Select * from "tiblMerge"사용

OpenDataSource를 통해 ODBC 드라이버를 사용할 때 유니 코드 문자열 데이터 형식 (NVARCHAR, NCHAR 등)이있는 열은 공백/null을 반환합니다.

유니 코드의 문제로 인해 Word의 일반적인 규칙에 따라 Microsoft는 ODBC가 SQL Server의 향후 연결 표준이 될 것이라고 발표 했음에도 불구하고 현재 OLE DB 공급자를 사용하는 것이 좋습니다. OLE DB를 사용하려면 Name 매개 변수는 관련된 모든 연결 정보와 함께 적절한 .odc 파일이어야하며 빈 .odc 파일을 지정하고 연결 정보를 제공 할 수 있어야합니다. Connection 매개 변수에서.