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

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

[复制链接]

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

6

主题

16

回帖

192

积分

注册会员

积分
192
发表于 2014-10-17 08:11:57 | 显示全部楼层 |阅读模式

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

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

x
//类文件
0 c2 ~6 b* a" E9 \0 P) v#pragma once
" r. p+ P, L! u& H- \" Q7 ?9 q#include "iostream"     - q! l# J+ M- d/ L: e3 [; H
#include "string"     ! q) H( w" i6 t+ Q: g4 o" T8 f
#include "vector"     
- J, P: U4 T% Z* `/ N2 U% g# s0 I4 _3 ]6 U* {
//添加对ADO的支持   
/ S" W) U6 m- P1 m" `9 O% N; j#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
0 k7 z" r! K8 ~2 S# x0 R#include <NXOpen\Session.hxx>
0 A, Z) i: M& d: ^8 I6 B/ Z) Q' z
3 o( |7 G. u8 g5 W; ^; H- M2 O4 g#include "uf.h". W& W! O" R! g/ }- `, n
#include "uf_ui.h"
1 B: B. V' n' i- Y#include <NXOpen/UI.hxx>" R; s$ S5 z$ z! @
#include <NXOpen/NXMessageBox.hxx>
, F, H6 c3 ?( p' }1 }! d#include <sstream>
  u3 L) |8 F2 V* p! [#include <NXOpen/ListingWindow.hxx>' Q5 x) F/ |3 }
using namespace NXOpen;
. m7 U1 c! j6 q% t( R. Cusing namespace std;
8 F4 d/ y! K+ g- }7 ], Z1 pclass LinkSQL) O6 c9 H' l) v8 @
{! o& C& d4 ~" y, r
public:! v. F! H; X1 [$ W; a8 F
        LinkSQL(void);  ?+ a1 i/ \8 \7 l. j
        ~LinkSQL(void);: v! p) o& m9 {( X
        void OpenSQL();  H% ^& c- e* x
        void ShowInformation();8 W/ ?* s2 C$ u, l7 ]' S8 ?
        void CloseSQL();
# e; x( D! y& _private:2 d* w4 i% x+ b5 p" y. K% g
        Session *theSession;
5 R+ r4 K$ i* a! V+ U/ M% U+ t3 Z        UI *theUI;
/ A8 ]1 ]  V6 M0 n# s6 o* W; e        _ConnectionPtr pMyConnect;
: Y, ~# w. D5 c9 }0 [        _RecordsetPtr pRst;
" A8 Q- P3 U4 `+ Y- u+ ^$ `, ]        stringstream ss;
+ p8 K+ g5 w1 R& e) [9 ^/ v% K};
# k3 g, N% a( F" g- O8 ?+ ~$ c; k# }3 h0 _- w
LinkSQL:inkSQL(void)
2 F! B! Y3 g4 u2 M3 s4 N{% n1 y' P0 A/ S* c$ T
        CoInitialize(NULL); //初始化COM环境              ! F8 g' q/ K: ?0 a. P8 @& r3 j$ U
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象    # V: H$ f7 N/ h) Z
        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  9 k3 j, Z! U: \$ Z0 v, B
        theSession=Session::GetSession();
$ k& N& H. D) @        theUI=UI::GetUI();
, i. Y; Q- B  V. U3 t}9 h/ q5 Z7 h8 _
1 m% R7 D- X' }8 T  x

, G" P; ?5 A  P1 N) T! ?LinkSQL::~LinkSQL(void)
; b( D4 C) G: ~4 b& l5 ~; s( }{
) ~' O9 \' j9 V8 }/ f$ q7 j}
* ~- `4 M/ J, [! mvoid LinkSQL::OpenSQL()) w7 o% ?' ^9 A0 z
{
* O2 s' e  N9 Y! |& e        try             / \+ A# A3 e9 }- u5 s1 V
        {                8 e( K4 F% n( I  z" c) N9 A
        $ C5 A3 I# D: R
                /*打开数据库“SQLServer” */               & l2 b3 P4 {4 M* b- d; T
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  6 p1 u' E6 N2 y% \
                    
4 W! q# ?' W5 j9 h- Z$ B        }   $ e+ `8 S7 e# V; n1 @& ^
        caTCh (_com_error &e)            
- L. j' j. o# t& Z9 i        {               
9 h5 ~9 N/ f' k6 E                 3 W+ s. s) K# K3 ~4 p$ b) q
                ss<<e.ErrorMessage();     
' T2 L8 m9 a0 ^                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());! i/ r. }6 @3 n' f, n
                ss.str("");5 G2 H* O' {3 I2 [7 c
                           
( U  r1 R% E) |0 I        }            
) [- ^' l7 n6 D; V- L+ M                         " T$ M& q; D5 x0 u% h6 t, A+ s0 r3 {
}
4 v% i' m( A( I& @void LinkSQL::CloseSQL()  f& A$ m$ e+ H& g. q2 R
{
  x0 I+ Q$ o  w4 e; K, g  i% s; B# O& _6 ^        try            
, B# C' [: P8 ^  P        {                   k3 u) c, I2 B6 V7 b

$ u8 @2 ]  u/ E& l! ~6 U. Z2 E                pRst->Close();     //关闭记录集                  ) d- C) c% C  F% u" J4 Y0 @
                pMyConnect->Close();//关闭数据库                  " h, K6 H" \% x3 O3 @: u
                pRst.Release();//释放记录集对象指针                  
  D7 d6 i! ~, P$ V' G8 h                pMyConnect.Release();//释放连接对象指针   
9 o$ ]1 L' U" P2 y3 F8 s        }  
1 H: i9 c2 ]1 R        catch(_com_error &e)            
/ z2 \" w4 q( k& v3 k) H        {                 3 Y& U7 V4 ^5 T+ k
                ss<<e.ErrorMessage();     1 m3 `& U( g& V2 A/ r
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
! X, ]. Y8 f9 ~$ s                ss.str("");          3 X/ T+ M1 I% L4 u% d3 ^
        }                   7 u6 X  P1 X0 X- Z4 j* k  E9 X, U
       
4 j' I. O( m0 g" q0 `+ e' w        CoUninitialize(); //释放COM环境   
4 Z0 d- h" o5 l) _0 V( D}, J: ?5 c# l; @8 g3 ~
void LinkSQL::ShowInformation()
' f4 K1 }; K- d: ]5 |{
& Q4 ?; j) O" e$ C0 y9 ^% Z6 G, u! g6 U4 l
        ListingWindow *thwLW=theSession->ListingWindow();
7 c& t, b. m! J( N6 d        thwLW->Open();" R( a5 e  k" B0 g/ l& I

0 q! W/ g% u1 Y* ?: r, h        try. U# D( _& h/ T
        {
  o2 Z9 X3 D% _8 {                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    . k# R$ H* u. b  x, B7 U5 c/ F
        }
7 a# l5 {/ w& x- e! N; R; D% t        catch(_com_error &e)" p1 C3 D% j% l2 G  M( g6 k
        {
0 F3 ~. F- k: X2 U( \4 P       
* B8 c* J( e# C4 ?& F8 c6 v# u                ss<<e.ErrorMessage();
4 ]: e; Q1 P! P                thwLW->WriteLine(ss.str());
- x- Z8 K2 g% W! x3 F# b  y% l                ss.str("");
6 Q4 q# t( q( e+ W" O* s                return;- K. ~: t- |. F% R
        }
* n0 V& z8 J6 u' y0 a% M}! h" x+ b" B. c
//执行文件
" k. v, t) E9 c/ Z3 R9 N' s' O* O        LinkSQL *theLinkSQL=new LinkSQL;3 F) _9 c* M: j2 b
        theLinkSQL->OpenSQL();
- @( f( M0 f1 Y. O) |/ V; [        theLinkSQL->ShowInformation();
7 d( }2 H% V' H        theLinkSQL->CloseSQL();
, Z& |2 S, R) ~6 z1 {; g        delete theLinkSQL;+ D( {8 Y7 N; L$ z9 s* V3 F  Z1 _

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

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了