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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件
4 a+ `. j  O" z, J+ f' n3 _% Z# B; i#pragma once7 B0 i* ~+ O( h+ V$ y
#include "iostream"     
1 r& ^, V1 `* ?2 n1 L2 _#include "string"     2 H  T; n+ H* R4 B) l7 f$ n4 W
#include "vector"     
, @, d* A* e) r* w( K5 C- d, P. g7 d6 ~' h& U/ P" b* a: k2 t8 T
//添加对ADO的支持   
& k& v" P7 r3 G8 y5 E4 E* e- ^#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 1 ]2 p& `4 J/ L- r) e. C0 d" R
#include <NXOpen\Session.hxx>! k" Y6 J$ U: F2 Z/ t5 R
0 D6 L( P+ x7 t8 f1 i- P4 ^. H
#include "uf.h"
# U2 w1 K( y( S3 A7 A#include "uf_ui.h"/ V' v# r* {0 \( Z, e' _7 V
#include <NXOpen/UI.hxx>
. U6 M6 b+ a$ W4 g#include <NXOpen/NXMessageBox.hxx>3 A3 }5 i# g. x: p$ U  H
#include <sstream>* C: d' M" r/ {/ D6 m; d' B: C
#include <NXOpen/ListingWindow.hxx>6 j8 h# g/ P& g8 s7 H8 m9 c) {  {
using namespace NXOpen;
) Q  j/ S* m& l" a# s* l# dusing namespace std;3 K& L0 K5 q. J; n. ~/ L3 i
class LinkSQL4 X) O( W* r9 M6 y. ]! _
{
4 A! k+ e2 w0 t; m- T0 e" Rpublic:
% a& J* E' j1 j' N4 ]7 [- n        LinkSQL(void);0 k, @( X" G; v6 t$ Q* @( g
        ~LinkSQL(void);, ]5 F: t+ Y' C
        void OpenSQL();/ u/ F! Z& h- ^& M, s
        void ShowInformation();
5 J9 y- Y, l( o( r( n. {. W        void CloseSQL();
3 _6 d9 b; s- J) j. I8 hprivate:, y9 u+ F8 A' h' r+ s: t& v
        Session *theSession;( o- v& t3 n3 q) L! a
        UI *theUI;$ b$ C4 f$ x; S0 H
        _ConnectionPtr pMyConnect;
! ?' V1 X! ^! p% ]        _RecordsetPtr pRst;
6 H# t% I# ^5 S7 c1 R# t+ \        stringstream ss;. F1 \) t% l5 Y: N- H
};
! G& o  q# r' t# g8 O/ |4 }3 Z0 A* |8 n6 _1 t! j/ i: t% M
LinkSQL:inkSQL(void)
1 G7 u' ?! A  e/ t# _+ ~5 x{
& v- g* q2 M1 A        CoInitialize(NULL); //初始化COM环境              $ z. A* r4 S0 m, X; Q1 S9 p0 m
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象    1 x, ~* E4 w! M/ W. `' t0 S, `
        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
# c3 X! F& m& ]) P5 i, E        theSession=Session::GetSession();# B8 L/ _8 ~# c. Z" [  `* L
        theUI=UI::GetUI();
1 L4 ~2 Q  J1 `5 N! m3 E" ~4 x}
9 T3 Q$ D& F1 S4 d7 |& j  p0 V7 e

- `" ^& l' `5 {+ [6 nLinkSQL::~LinkSQL(void)& ]! U5 n* C  _( H
{$ F: c: d* C! H
}
( W5 X4 o, Z" f% [( Kvoid LinkSQL::OpenSQL()
2 `" M) m- z  Z, y{7 `2 F# N- M4 I" C. C6 `% B
        try             $ M0 P5 E9 y+ c- T' P1 z" H5 [
        {               
1 E: W7 r" ?" p/ z) K: @$ F        ) c( C% V, z3 W
                /*打开数据库“SQLServer” */               ! }3 r" d8 h' B
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  ) F- E) D+ i2 z; {3 K  w
                    
6 V/ @8 L" r( f- V: Y5 M        }   & W, e, u# Z2 u
        caTCh (_com_error &e)             6 C8 a# r( W4 T5 Z; @& T  J' N# T
        {               
/ S9 P5 D" d4 F4 c                 
7 B" v: ]* E/ o                ss<<e.ErrorMessage();     
! c/ P/ @+ @/ |5 o$ C                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
7 I9 ?0 G8 i+ C7 w* p  b9 A; H9 ?                ss.str("");
5 n" q! z# X% Y: H0 Y0 ]( G                           
/ r4 |# p4 [- d2 h0 e: N+ o1 G        }            
' A4 E3 u7 {* p3 D- T4 h) }2 z                         9 l" \' P* W, m1 P
}% \6 X% O- x. b' b$ y
void LinkSQL::CloseSQL()
3 @# ?& q+ h( A, z' R{
# a( A2 Q& I' F( m        try             5 M( X: B' p$ Z% t/ }! J$ m9 B
        {                 % O1 P$ ]% N6 u* t. l* K& N0 ^

/ _8 U/ v* p( @& m: K# b                pRst->Close();     //关闭记录集                  + r( \1 ^; W) b3 i+ u
                pMyConnect->Close();//关闭数据库                  + H1 K" T1 ^0 p& g# R
                pRst.Release();//释放记录集对象指针                  * J( r+ R, {  e" [+ Q* W% s
                pMyConnect.Release();//释放连接对象指针   
1 }( \. \2 E. H/ ^8 B: c& s' R        }  - w) u% j3 v9 i* X
        catch(_com_error &e)             3 K, |2 V9 z0 W! ~! }9 ^7 t8 i" A
        {                 , H0 L# D7 i4 }7 Y0 Q- n
                ss<<e.ErrorMessage();     8 A' W3 T4 g5 w! K+ V( G
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());' c+ Q5 W8 ]/ ^+ Q
                ss.str("");         
$ N2 [+ w/ h( B, r( e9 m, J! m        }                  
4 n8 f) v* c! M# }3 P       
  S6 O3 Z7 y2 o+ W" s' Z7 T        CoUninitialize(); //释放COM环境   
. r! T% J4 k' q$ L}! m! Z( ?% U, {; k% c; i% C( i
void LinkSQL::ShowInformation()2 f/ c- Y# p4 S% e$ Y3 j
{/ `. V. j% N3 U' U

3 `% o# ]: L6 s6 M0 ~( E0 g( G        ListingWindow *thwLW=theSession->ListingWindow();
" g2 b  v8 d# n4 ~& L0 I$ P        thwLW->Open();
' N& r& K4 S4 s4 z
! l, c0 c4 i5 z        try
% x/ y# j" y$ ]0 \        {6 e. P$ D2 K% V( [" h
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat   
5 o. {! n2 y( d9 D9 K  |        }
) z& h6 v, X" w0 {8 n& X        catch(_com_error &e)/ `' y) y) t4 o4 d1 s9 C7 M
        {
- L; R! j; M. G% j% b& @       
4 w2 l9 x" y/ s: R, O8 q( e$ P0 h                ss<<e.ErrorMessage();
4 W$ s( l, W, n* t1 m5 z                thwLW->WriteLine(ss.str());
! |% m) {; ?8 x8 ?5 g                ss.str("");
2 ?: m% c6 N7 N! U( z" P                return;
1 C8 J, t3 b" U" T8 h7 b" w3 E) V        }
3 |1 B6 t# ?$ ~: j$ \# X}6 J( G# V; n& G6 D9 |+ r  q; P! A
//执行文件
1 n) _& u0 T$ q: X        LinkSQL *theLinkSQL=new LinkSQL;
. w0 R% q* x: K- j5 L2 {8 d& o        theLinkSQL->OpenSQL();0 \( i$ T, N7 |. v- L' H
        theLinkSQL->ShowInformation();
$ C: n" I2 e" d1 v( U% l  G0 ?        theLinkSQL->CloseSQL();  J4 |! W1 O/ N2 i( f+ z) o1 X6 i' D0 R
        delete theLinkSQL;
* l7 P: ^3 A0 q% b7 L, R- L* `- y7 e* s( O  m; _
哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了