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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件, I$ J0 K: O6 A) ^7 h
#pragma once; n& X7 K2 j+ r% a2 c& `4 F* \9 n
#include "iostream"     , d  n; X- m. p# \
#include "string"     
1 P8 P8 K, a; I4 c9 C6 R#include "vector"     5 D( A+ f+ f# p8 J3 r

, Q, x4 x. l& `3 Z1 _, B1 f//添加对ADO的支持   
/ |4 b7 {0 R/ T#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 0 }. U$ E7 v5 a' Z  U5 {
#include <NXOpen\Session.hxx>, X- D. e. d9 L! I1 ]
! @8 R( D1 J& C4 J& `' h, o; }
#include "uf.h"
; k1 y- f! D& K7 G: V#include "uf_ui.h"4 j6 Y7 }7 |; ^! S1 M  V
#include <NXOpen/UI.hxx>  f6 P& ^0 [) p0 s
#include <NXOpen/NXMessageBox.hxx>
" C, k1 N: z4 x1 I- ^. W6 N3 J. G#include <sstream>
" x6 k# ], E# Y0 v& a3 t- G1 s2 F#include <NXOpen/ListingWindow.hxx>
  w% `, k1 |! I$ g+ m1 G1 [: Fusing namespace NXOpen;
$ e$ Y+ w7 m; Cusing namespace std;, Q( o, V* e' ]* y" }( |# A# Q
class LinkSQL
$ c  s6 l: _& m! |{; ~9 k& n- B( B  N6 h9 x! F, T( `
public:
# \3 }1 A$ O5 N6 n: c        LinkSQL(void);
( D: ]8 L5 D+ @        ~LinkSQL(void);
; s; f, ]  B! ~. _* P& C        void OpenSQL();4 b: A# ?' t. q1 Q
        void ShowInformation();8 u2 [) ?' x! Q* a% C, F% r
        void CloseSQL();
& S; a" w  G: ~. t+ h: oprivate:& k7 Q& |+ x' _7 A7 m, l2 H
        Session *theSession;
; F- m" v& Z0 G* R        UI *theUI;8 F# g# P3 r; {) @  B; D6 A
        _ConnectionPtr pMyConnect;
! c% C# Y! V) d0 e9 C        _RecordsetPtr pRst; ( K) X& m3 Z) c' Y, {
        stringstream ss;% r1 T( [! Q8 K& l
};# F+ l' l2 F7 Q: p3 S8 h

4 h9 `' w% f, O  C2 @; W0 }7 WLinkSQL:inkSQL(void). P$ X+ T' G/ C% h* \% C) Y- I: n
{
1 C; v  ]: h2 f8 D5 ]        CoInitialize(NULL); //初始化COM环境              , M2 Y. o$ \4 ?/ N
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象    ( H# n7 I9 M% ~* q, H2 M- Q
        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  ( J' i* ]7 l/ k: F" J
        theSession=Session::GetSession();
4 m$ Q) b5 `" G0 _        theUI=UI::GetUI();
4 y+ \) n1 N4 T; S% t0 w/ N' ~' s& ?}9 B7 r8 V5 g9 W( w' f: I2 w) @
7 f) C( f' D! Y5 L9 W: G

- t4 K( @# \1 A, }0 N4 ?LinkSQL::~LinkSQL(void)
* F$ D( e5 p: Z8 `- ~{; @" d3 _1 k9 `% K3 P
}
' r& u+ g. ^( S: D) \! X- Nvoid LinkSQL::OpenSQL()
, h/ m/ v" c  ~2 c" X5 c" W" e3 Z{
- H/ g; t; |' Q: k        try            
2 R7 [& l9 i" G        {                : L0 v; e* R. O9 A1 {; {
       
% J2 f- _' J) _& X                /*打开数据库“SQLServer” */               
6 `, m0 Y0 l2 p                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
1 |5 i" K# b: f! U- t2 A                    6 s: y) G' v, |! W+ g
        }   
+ S- H) U' U" T( w7 d- T8 ?) W; y        caTCh (_com_error &e)            
- @6 G) N7 W% t% i/ k" @        {                3 Y# `. E7 i& l8 Z2 D1 O! W: Y0 A
                 3 \( V  h" t! j4 N; e) `$ I7 X) R
                ss<<e.ErrorMessage();     
8 w, V+ E* Z. C- w                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());" e& Z3 ?& w4 n- R
                ss.str("");
* _/ y& T5 w/ h( K7 J# e                            0 m+ [7 c3 h+ |7 B* J
        }             6 r$ s$ f0 }( h; \
                         
( `3 c) n5 g, m! g}
- Y( o) g! \( Q. _  Zvoid LinkSQL::CloseSQL()4 l# Q0 Y  i. y/ R$ I3 C( j/ s
{6 o5 S  F& }! H
        try             3 ~% N1 H) m% N2 j+ T
        {                 8 A* _0 c# @  F0 |! u

& b. \* n  w7 V8 l. O! \( `                pRst->Close();     //关闭记录集                  
. b7 c1 J* m" A  `                pMyConnect->Close();//关闭数据库                  ) Y2 D- i) s; N2 i( R/ ~
                pRst.Release();//释放记录集对象指针                  
! y& U9 @) B, B' _) j                pMyConnect.Release();//释放连接对象指针   8 I2 |# n7 m3 M  e
        }  
/ _9 y& s: M8 H8 R        catch(_com_error &e)            
* Y, F- S- Z, D: Y* B0 {        {                 9 H* C  E6 G+ H  r9 e
                ss<<e.ErrorMessage();     0 @3 t- h, j- R# V& m+ y7 l7 }
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
- v0 d9 O2 @6 g6 i( s: B                ss.str("");          : M" f$ K! e3 A6 x" k( ?# l2 [+ ^9 y
        }                  
2 M1 n7 O' f2 g) {        % x+ u, D& h$ f: u! V) i
        CoUninitialize(); //释放COM环境   / d6 y3 N/ |2 ~1 L6 [( d
}
4 E" t( _1 [4 s, ^4 [( ^8 Dvoid LinkSQL::ShowInformation(): Y0 C! z/ t+ Q, |: u0 n  O9 d
{
7 T; i: }/ y3 N0 k0 ~
5 k  g- P' f6 [& A' C# T        ListingWindow *thwLW=theSession->ListingWindow();4 y  U6 H  q( f. s. s
        thwLW->Open();4 f) Y  l4 R3 b. O+ ~$ i

. {9 l' ~. k- x$ x        try4 B" h- r/ N* D$ `9 m% M+ A7 d' F' @
        {+ R9 \! D& ~& D( X3 Q" H" Y
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    * {) {0 Y4 w. `5 ~
        }
+ r: u. D( f% s7 q( ^        catch(_com_error &e)
9 j7 ~" m( n" K- R        {
- C# ~7 J( v* V        ! u' Q2 Y% m' z
                ss<<e.ErrorMessage();
* i; ]* E% s' f' h6 ]* B" O! C                thwLW->WriteLine(ss.str());- O# ^1 |( ]% d: A. m( k
                ss.str("");: c9 M4 h5 p8 j+ o( {. s) F* d
                return;
2 c6 r0 @0 e" s6 p6 E4 [        }
% p4 Y7 }# V! ?! L2 R9 {+ A+ C}
4 E4 E# p7 g+ m8 |8 B2 M) q) o7 G' O, H9 [//执行文件+ }* Z4 m+ F! I& c
        LinkSQL *theLinkSQL=new LinkSQL;; x% b; ~% s* b+ q8 n
        theLinkSQL->OpenSQL();1 {- J2 V3 Q; R1 o+ a4 o2 a% z& a
        theLinkSQL->ShowInformation();& g' Q! }8 o1 e) s' q" }5 h# [
        theLinkSQL->CloseSQL();# ], n# i4 V! [- U0 v8 m- f3 P
        delete theLinkSQL;7 l8 ?: B1 s6 J

+ F& ]  A- ^; m* D5 F0 w7 Q哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了