PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件3 k1 r! j) B2 P- w& F, }0 M$ W3 p
#pragma once0 b9 ]8 a  a/ B0 o+ [! }
#include "iostream"     
5 {4 z' r) }: ], f#include "string"     
) [  j9 H* g- ^0 x7 }9 F! z" D#include "vector"     
$ s& }8 V% ~9 S  T6 t% O3 i+ Z0 [1 c, k+ e! t0 w$ v
//添加对ADO的支持   
% }! {4 q8 I# x4 I" H) }0 F% P; ~#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
; \! M  y" e& _7 r% p2 B0 d) a#include <NXOpen\Session.hxx>3 a. w$ [# N7 p0 c+ L

% }+ [2 @0 \! B. U3 V#include "uf.h"
  P2 b0 k' l: }! J3 R: W7 `#include "uf_ui.h"  {$ `& W+ {! C% k+ q+ \, z
#include <NXOpen/UI.hxx>* [) }$ j' B$ |: F
#include <NXOpen/NXMessageBox.hxx>
3 c# w# Q. `; I, n6 ?#include <sstream>0 \- E/ L- u/ }2 w
#include <NXOpen/ListingWindow.hxx>. E' B- t7 G( C( d: p. n5 S% b' D
using namespace NXOpen;
1 x" I, v; B# ]0 zusing namespace std;
2 O4 l# `0 v2 R+ ^% {/ n: n2 j, |class LinkSQL8 h, ], ?& X: E6 }" h- o  B8 h
{
2 M% F; I) r# x6 C7 h8 {' K/ Spublic:( l5 X. T2 j1 ]' M5 m3 Y
        LinkSQL(void);2 q! o2 V" {( d4 C( F7 R/ G
        ~LinkSQL(void);
5 C$ E9 W& _4 T, U$ ?        void OpenSQL();
- Z! Y1 x, k  \9 m        void ShowInformation();: ~) }( }' T* {* q4 Q! i+ S
        void CloseSQL();
9 }3 j; o$ ?+ x2 oprivate:. g4 m' ^/ m/ l! t5 @% Q* R
        Session *theSession;& Y' @! \- J; e* b6 @9 T1 u0 I$ T$ V
        UI *theUI;
# @: ^5 x2 `/ P4 ?8 u% ^* j. L7 h        _ConnectionPtr pMyConnect;
' c* r$ N& ?" c+ p0 F4 F3 t7 Y9 H        _RecordsetPtr pRst; * p, G  R5 `$ Z0 |& U
        stringstream ss;1 j5 _5 A' X* K9 p8 t: G9 u
};$ o0 I3 A( v3 M. F7 x* U7 b  n) A6 _
9 p# o. G) s* W* l  F
LinkSQL:inkSQL(void)" p, b: q/ ~+ E* ]
{
+ G" Q! t4 \; H# J5 i        CoInitialize(NULL); //初始化COM环境              
6 I. c" w  w* ?! ~        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
5 n$ l# ?! A3 Y' J4 _3 X. D        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  ( @. Z1 j. a) D. d
        theSession=Session::GetSession();3 d( T" n: S8 y# Q1 l+ @
        theUI=UI::GetUI();
' j. U8 A! J7 `, E2 L3 Q}
* q; T1 K% p- r1 Q- x" i( i( s0 ]- i2 V2 R9 f; U
0 A5 D) A( Q& v' s% C8 D
LinkSQL::~LinkSQL(void)
. c8 _& j0 E/ r7 Q7 H{" R1 }  e% t5 I
}
2 f( s; ?" N5 C6 d8 ?/ m+ Rvoid LinkSQL::OpenSQL()
8 T& ]2 |- X5 K  @- x+ A- v{
( ~- u; b! T* ]7 l" o        try             / i. B% C! [  h2 u; ^# Y6 `  R
        {                4 ], ~+ a6 G8 `) f: w2 N
       
' U6 ~; e* A) g( C                /*打开数据库“SQLServer” */               - i' Q$ L8 k4 D( e0 W* o+ F: ]
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
  g/ M- g' x% E( C2 e( r                    + E6 C) J. }3 u9 c0 I
        }   ( T$ l0 q+ f, L+ |; \4 c0 P9 H- Z# Z
        caTCh (_com_error &e)            
1 {2 k+ H2 o2 l7 @( K/ z( X: Q        {                : p7 S8 a& r0 D& y
                 
. k0 t# K" j' P5 u- @                ss<<e.ErrorMessage();     
5 _1 a3 I4 l# @# b' t                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());( I+ K+ f: N* y# h( A
                ss.str("");7 `! f; N  q  W1 m  H! \3 h3 G: p
                            ; ~' N7 s' D8 z5 J! ]4 f: l/ t  \
        }             " e- S4 E3 D( A$ @. @
                         & _8 G; K) T+ a7 \" a- b; J% Y$ S
}+ s% d  z6 a+ ?/ m0 J% u+ n
void LinkSQL::CloseSQL()
* z) l$ l" w4 U$ j$ ^{5 `1 ?0 \+ F; G1 @
        try             . p. ]# k: [( {  Z6 r
        {                 ; o  j2 _8 Q+ H% z8 J

6 }+ w1 F0 M& H) ]                pRst->Close();     //关闭记录集                  
, n3 _$ U/ u) y; _. c                pMyConnect->Close();//关闭数据库                  , {# u0 K% \1 A3 b1 v& _
                pRst.Release();//释放记录集对象指针                  
) z. B# Q; L/ u2 e5 {" r                pMyConnect.Release();//释放连接对象指针   - Q7 z  u$ M& t1 U& j7 s4 Q3 t
        }  
2 z5 h; i% N7 o# E( o! Z        catch(_com_error &e)            
, }* A" {" @5 O  v- X+ x        {                 
1 q8 @  N+ u5 Q3 @" v2 G( O                ss<<e.ErrorMessage();     % X7 [: N1 B/ H$ K' ~7 o0 Q
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());9 a! W* L( [9 |! [; p
                ss.str("");          4 Q- D3 h% S) h; ^! p
        }                  
+ X; ^' I0 }* O5 _) N1 a5 w        ) f) L* U! p3 I4 N4 w% \( ^
        CoUninitialize(); //释放COM环境   : {+ [$ e, X$ v; I; O2 b# z1 Y
}) O' q  v5 H2 r9 o
void LinkSQL::ShowInformation()
  T8 }. t& {$ E; P; q# ~{
9 u3 T1 o6 _& D9 S- Z% B& V+ Q3 [' T
# S( h9 r9 L* c0 l        ListingWindow *thwLW=theSession->ListingWindow();
' e2 ]4 S8 N# p+ X$ ~; z" r        thwLW->Open();+ s* s5 j8 d' H4 |5 h5 E
+ d, b$ s  H$ Q2 c
        try) X) X/ N$ K# l* B  \( y
        {1 `% |1 A: s( L0 h. m2 r: K
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat   
& V& A6 T. i. q- t6 S2 F) `" j        }  w% W4 n. w" p1 v- Z5 @4 c
        catch(_com_error &e)) C4 k3 _3 ?! }( T* v7 B+ t
        {4 h" z: a, r- [; g% c0 A2 R
        / S* N- D4 c( E# @
                ss<<e.ErrorMessage();% \3 W) R- q( Z6 U4 g
                thwLW->WriteLine(ss.str());
" h% P; k3 {/ T& d                ss.str("");' _- N/ L, A& C1 @% ^: ^
                return;. N6 p' p% h* w. C- m
        }. Q, N: [8 W) K! B" V9 f- e6 Z
}
$ _/ h( _: O% @9 Q$ @//执行文件0 P4 D) L8 y3 R
        LinkSQL *theLinkSQL=new LinkSQL;( x1 b& A  P! C/ q% h
        theLinkSQL->OpenSQL();! z1 [% L: u  `. ^7 _0 I3 Q
        theLinkSQL->ShowInformation();
  \+ M& T% G! T" `: P        theLinkSQL->CloseSQL();1 n; f/ i0 D8 w( \# ?0 a2 I
        delete theLinkSQL;
7 C9 T, ^0 ]. W% `# P4 O( x7 m% W; v4 w5 p
哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了