PLM之家PLMHome-工业软件践行者

[求助] C++用ADO连接SQL数据库出错

[复制链接]

2014-10-17 08:11:57 2987 0

xiao2076 发表于 2014-10-17 08:11:57 |阅读模式

xiao2076 楼主

2014-10-17 08:11:57

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
//类文件  }6 ?, v4 o- w! x8 M1 t# T* \
#pragma once7 k( G* _, P% ?9 y) P8 [% U
#include "iostream"     
  d  q  [; B6 M0 F#include "string"     ! B: M: e1 }& H) g; S3 {
#include "vector"     
+ |- ~' q' E2 ]7 f  S# i+ P1 o! C1 g, ?- o! ~
//添加对ADO的支持   # S0 L, u1 g! o9 o. U- \
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") . P0 Q+ w' ?  t' R) y) V4 I% m
#include <NXOpen\Session.hxx>8 Y. Z" N& o" [! w0 G

5 l/ I* |2 Z5 S% l9 r6 F#include "uf.h"9 p! O( g% v4 D- |% v1 k7 D5 H
#include "uf_ui.h"
6 v6 M% x2 p6 z3 a# Y+ y#include <NXOpen/UI.hxx>
) ]# m3 [7 k1 o& X& ]# `- ~" }#include <NXOpen/NXMessageBox.hxx>; u+ a' k9 l: G9 k
#include <sstream>
+ z/ D) l% q0 n$ k1 c: o. P#include <NXOpen/ListingWindow.hxx>' E2 Q5 N  |3 k1 v! ^: P) v& }3 y
using namespace NXOpen;9 h7 W9 E9 g7 g
using namespace std;
; p- G8 S" S* k6 Y( w' t7 x, _' Bclass LinkSQL
: x( \7 L; J0 U5 x: }8 Q{2 ^3 C. i1 ~0 s9 W8 s' K1 S, f
public:
& z( w. x: j4 C7 F: S8 O% D        LinkSQL(void);
+ @+ d0 L1 K' _; u) H        ~LinkSQL(void);- `8 ~" ?' L9 K. i  w4 j. `: I
        void OpenSQL();
) g7 P+ g1 Z+ p  k: f- t3 }8 n. ^* S        void ShowInformation();" F$ X7 O5 o: [$ R9 l, p) `) B
        void CloseSQL();
; c7 Y& [# @8 m. R8 Z/ I4 }3 Eprivate:
; r; \6 X* i5 H7 L0 I4 f        Session *theSession;$ C( b  |/ N" [: B( ]5 [" q
        UI *theUI;
2 l% w) _4 w7 z9 I        _ConnectionPtr pMyConnect;
$ r5 Y# L# Q( X  u& \( t        _RecordsetPtr pRst; + U/ k% [5 X0 L( r9 J
        stringstream ss;* }  t* `5 E3 e" A5 g& c; \( ?) H
};
& {0 G! |/ R8 Y% `( j
) o9 k" r; O* ^. G. }* ~LinkSQL:inkSQL(void)
8 v8 M4 V1 [0 i( F; H2 ~6 X7 U{% }/ ^* M; w: z5 Y5 k4 L7 w4 f
        CoInitialize(NULL); //初始化COM环境              2 q+ F9 J* w; I( z
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象    9 h: T( E3 x, o6 V4 N6 R$ ~8 h" t
        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
7 w: b* L% B& h6 e3 q5 S2 a0 \        theSession=Session::GetSession();
, L% W' {9 U( \. i% f# a) M        theUI=UI::GetUI();' n# e* R% F: X+ m6 C3 r8 g7 c
}* ~! Y& ?5 M5 O2 V
8 _+ F) B3 D# V0 P" y9 \( N

$ R; Z/ w7 i2 X1 qLinkSQL::~LinkSQL(void)1 p. r. b2 R$ g8 D8 n4 y3 V
{
/ R; D, e& Q+ E  y6 \}2 w* ~  P4 W+ U" x
void LinkSQL::OpenSQL()
. c( D) a/ X3 i: G{
6 o7 D( p( e2 j( ~' b' ^8 G! _        try             # N8 b9 R, C, ^" D) z2 U
        {                3 ]- n3 a% O. \1 j3 f
        " V4 Q/ p( }. t9 E
                /*打开数据库“SQLServer” */               7 A! F: ~6 ^- w0 A% P
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
$ B/ m! y7 i2 _3 F3 h                    
+ l( U. i8 T1 u: N& f* l        }   3 N9 X1 [/ p2 W5 l& N
        caTCh (_com_error &e)            
2 ~, ^* _/ o( N$ M& b0 {* P$ e8 \        {               
7 [' ~) m. {' }                 
. ~6 \! z" n: x                ss<<e.ErrorMessage();     * f$ Z, y" n/ u- i# p
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
0 Y/ u) C/ d7 [/ M4 [                ss.str("");
; I% z; H) A  \; k! P! h5 s                           
+ R8 Y  H2 n6 ?& ~9 Q! G        }             3 `( V- V! l6 O1 i7 @; i5 _! n
                         , Z( p8 k: N+ w. a+ c, Q. l1 B: ~
}
" v+ W; W) {* ]4 J7 Svoid LinkSQL::CloseSQL()
8 V, k" t/ z7 ~) ?8 K7 B+ Q{4 D: D: ^. J- l* v+ T, L
        try             $ _# Q/ K7 V! u$ }! S7 N
        {                 
. N9 t2 I% N0 R7 P/ L5 ~7 F  s6 T3 j/ g" v9 B" G; a
                pRst->Close();     //关闭记录集                  
7 O7 Q' f+ u2 z1 a) a" ]/ r                pMyConnect->Close();//关闭数据库                  
3 Q) Z& M* ]& L- d7 }: o/ G; g9 R                pRst.Release();//释放记录集对象指针                  : R3 A: J7 ~" d: b' u/ s/ J
                pMyConnect.Release();//释放连接对象指针   2 L. M% t' q& ]0 O: L6 m# \
        }  # S. z( D! Z: t4 J7 _- b
        catch(_com_error &e)            
9 s  p# X8 m: d5 F9 h% J9 N        {                 7 c+ Z) N! s' \6 C7 Q
                ss<<e.ErrorMessage();     
& p; n/ W  J$ l8 ?; M                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());9 g  u7 B, Y1 Q  M
                ss.str("");         
0 a+ h8 [5 B/ b( q) X+ ~- n        }                  
" x$ G- N1 z. D, H        1 I: @4 p& a' X: g
        CoUninitialize(); //释放COM环境   % ^# t; {- u: N- \) L- V
}; }; G0 Y+ W9 [5 M6 E- B' J% E
void LinkSQL::ShowInformation()# i/ z" g5 S! u( [
{
' _- Z' ^% n0 {8 ~6 g5 ]
+ E- Y1 Q, E+ ^( x, Q        ListingWindow *thwLW=theSession->ListingWindow();4 S) m! K( f. E% B$ h
        thwLW->Open();
7 S, o+ E! X$ d/ C5 h7 f: y2 X( I7 l" R. s
        try6 H' E- l4 [3 w( w1 \
        {4 M8 W6 U4 o1 x* e% l, o9 Q/ L
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    ; b3 {# `  Y1 G( I! f; Y: z" r5 b1 C
        }
0 n+ W$ u) j' D. D! d: t        catch(_com_error &e)- X2 Y6 V; n' q
        {
6 I) I: K" i0 {# a7 G        ' p/ O2 G2 D; a$ j9 |4 N# O/ Q3 [
                ss<<e.ErrorMessage();
5 P% o9 S- J; m7 ^- N8 E% s                thwLW->WriteLine(ss.str());
/ w) O) c6 `4 T5 K- s$ M                ss.str("");
! U) p; p% J" j; p% C) {8 h% x' b0 e                return;
# M/ {" S6 ^, U7 M        }
% q- O5 C- O( j' v' D4 @1 W}
. J& u& A& q; y. }5 Y//执行文件
' @! ^( O- x5 V9 z6 [7 I        LinkSQL *theLinkSQL=new LinkSQL;
. D8 u: @  d6 O, S- `) R' ?2 c        theLinkSQL->OpenSQL();
7 ~' B. S2 _" |$ c        theLinkSQL->ShowInformation();) B: u+ c5 e9 c8 j
        theLinkSQL->CloseSQL();8 r/ B: `6 a( w: X* C. r& y
        delete theLinkSQL;" \6 o8 c; m  b* c. w  ^

, _, a5 z0 t7 `9 v哪个地方出错了,在控制台程序的时候没问题,在UG中就会出错
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了