PLM之家PLMHome-国产软件践行者

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件) X  M4 f6 E+ P6 }5 J
#pragma once
! ?5 ]/ i% l, g" M8 Y#include "iostream"     
  W# s( u, B! t6 O7 }. Q/ i2 _#include "string"     ' R( u) d% l3 H4 k
#include "vector"     % Z3 }4 F- P% b" A  d4 R- \
9 \. b. Q2 s2 A& ?6 C
//添加对ADO的支持   
: t! u. z8 y/ P#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") % j8 V- ^4 v3 M3 g
#include <NXOpen\Session.hxx>8 u4 `' [* V8 q) N+ c0 {
9 h9 P  w$ }% [0 H. Z
#include "uf.h"% C$ x  j! [! x1 m% S* T& D
#include "uf_ui.h"9 E. S. h4 h9 U  V* j% U5 E
#include <NXOpen/UI.hxx>2 F. ]' T& k, \' ?
#include <NXOpen/NXMessageBox.hxx>
% d' R. v0 W8 `: j! ?#include <sstream>: B/ v3 `2 g- E9 B8 L& l3 o9 `
#include <NXOpen/ListingWindow.hxx>9 W$ E4 X3 a2 {8 m! z4 Q' Z& b
using namespace NXOpen;
% u. p, N  G. Z+ X+ ], [using namespace std;
$ i* [4 \* o2 e1 ~0 w3 L, qclass LinkSQL  |' t  J9 ]$ l* X; ^
{
3 n2 \4 _0 V& O4 [7 J5 \  R2 Y4 x) ^public:
# b1 U( q% k* J        LinkSQL(void);( V( @, P2 V* Y
        ~LinkSQL(void);. D3 l* y* x  r; Q4 i' m
        void OpenSQL();/ ^+ K% s7 E( E* Z
        void ShowInformation();, q# [* n3 h+ e  T" |
        void CloseSQL();
% @5 T4 K( L: f6 ?5 [# [! Eprivate:
* B( s0 p/ S& c* J& o9 P        Session *theSession;
1 ~( B! q7 K# C" f. _* u        UI *theUI;) b# W8 I; Z: h1 `. `7 h
        _ConnectionPtr pMyConnect;  L9 ~$ b. h2 m. u0 E
        _RecordsetPtr pRst;
  \6 P% ?$ t  u) m9 E/ D        stringstream ss;2 I' z0 r& y. O9 }: Q2 |
};
3 e" W5 q7 x" P8 [6 Q! \7 }+ p, p* D8 x
LinkSQL:inkSQL(void)
/ N2 c& e  z- C' x" S, ~) H. ^{
( h2 i# H4 I2 f1 ]4 W4 Q4 y        CoInitialize(NULL); //初始化COM环境              
2 D" w, Q) ~7 o& b/ x! i8 D: ?        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
8 g$ M+ g0 m. r( N% L6 A        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
$ A3 c- B! l3 ?7 F        theSession=Session::GetSession();$ `4 x. K. @/ \+ j4 v
        theUI=UI::GetUI();
& B4 R" E5 H) |" x& B4 `}
$ T. l& W8 @" B# |" T4 M5 j& F1 B3 \6 c
' Q9 g' v& |2 g! O7 g
LinkSQL::~LinkSQL(void), K+ w& c3 I- ~9 Y& h
{
5 j, L5 U' L! B5 s5 N/ ]}
& f: v% h7 _7 R; W+ Cvoid LinkSQL::OpenSQL(); {  ^. d4 X) @' M3 ~
{
  e$ `. J8 n7 D2 w5 \3 v        try             6 d6 |( @/ c/ e8 U
        {                8 p0 V8 \) \% _% e; i* F1 w
       
1 E, w; R* |* W, F8 U0 Z                /*打开数据库“SQLServer” */               
& e4 @) A3 H% h3 O: j: D- Q                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  4 `9 p' o5 j- u6 H& X1 d
                    ) r9 f( \7 _7 U( l$ m1 v
        }   
& h( m: _$ s" |$ L, c0 a6 Q        caTCh (_com_error &e)             / F% A- U4 {# a- Y; S" l2 P+ m
        {                9 k0 L  s2 w" i, R$ }
                 
2 k  {: [1 S- z                ss<<e.ErrorMessage();     
( j1 L1 K7 Z$ n, z& _; Y                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());0 ^% \5 M- n2 T
                ss.str("");
7 c% @0 u0 o1 \  W                            ) }* N' v  Y0 |; B* {7 T
        }             4 ?6 u- w1 }2 \: V
                         ; b- w; l" |" d7 ?# z1 g# Y0 x2 y
}
" Q2 ~: M( e: v9 F" X4 _void LinkSQL::CloseSQL()
2 P: r3 |1 S1 ?9 Y) O9 w{; R6 j2 h4 R1 U. T0 q) m+ u$ ^/ ?+ x
        try             / h  P8 t/ H2 q; o0 Y& U# I7 X
        {                 0 y6 n7 d- ^  u1 {% |

8 l, p% Q. I$ `+ {                pRst->Close();     //关闭记录集                  ' b6 Z8 P' c9 |  i" U) A
                pMyConnect->Close();//关闭数据库                  $ M% d# W0 ^3 L% S7 k' L8 Q1 S
                pRst.Release();//释放记录集对象指针                  
# b$ z" p3 s* p4 g$ ~, G                pMyConnect.Release();//释放连接对象指针   
/ L1 M; v0 {  f% Z        }    b! g! T% h0 ?" H
        catch(_com_error &e)             1 `7 r# y- M* p/ L
        {                 
3 S" E" O) J1 x0 G& b                ss<<e.ErrorMessage();     
$ }( U( A, f) l. ]7 o2 v                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());1 W# M# H8 \. `6 L1 Z, N) S/ {
                ss.str("");         
6 e( a" ?8 ~9 N3 V  n; O* \        }                  
: F5 |. q% k  G: L+ c- t, [+ @2 ?        ' K/ }6 O  u. o
        CoUninitialize(); //释放COM环境   ! d/ B; S, {& }. L! g
}% X+ N- G* P! D: k
void LinkSQL::ShowInformation()
5 y9 v$ \% C- k/ T0 M{' n* R! t5 r5 @: G! \; t

8 ]: e3 @8 v1 M1 T" a        ListingWindow *thwLW=theSession->ListingWindow();
* m" t% h' ^: N& G4 T3 [) A4 W; n        thwLW->Open();0 @! J9 n% z2 @9 e; g3 h

1 G7 F. ?7 k& t. U; v9 p# H        try7 v0 x6 `, L: N
        {2 m- c0 {' P/ M' V6 a! K$ g
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    1 ?0 F" K) ?9 A+ s
        }+ s' T6 M1 v5 S& n1 S9 |) s
        catch(_com_error &e)
5 \* F* ~+ K  `' |( Y: C; ]        {9 y% N5 O5 G( _
        0 E. a/ f; }. d  Q+ r) k0 _5 g
                ss<<e.ErrorMessage();2 B" |5 K: V9 c. q
                thwLW->WriteLine(ss.str());
# _5 q" _& t8 c+ q0 m* k2 E& G                ss.str("");
6 e# `' z- z( q( p; ?6 F                return;4 m4 {) Y1 s; X
        }; d$ |' Z8 z/ z) I
}3 m1 }: M! Z8 u6 x6 I7 f- P
//执行文件
4 H& k3 f. _( z2 g, e+ ]        LinkSQL *theLinkSQL=new LinkSQL;0 ?% ~7 F1 @* [! {7 _
        theLinkSQL->OpenSQL();
/ J3 F& y$ V. _* j5 `  |' o) h4 {9 d        theLinkSQL->ShowInformation();9 D( _2 N3 o' ]6 I' Z: A
        theLinkSQL->CloseSQL();
9 I$ K6 _4 @# T( `! y1 {5 x! a        delete theLinkSQL;
8 I) D. `$ \; y- j; p4 @) T" A" f- x, _; l  @. r' C
哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了