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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件
, L% a; u6 }0 O- y) \$ g; U#pragma once
5 P3 |% |. S: u1 M#include "iostream"     # p' I! n* K) Y8 W* E7 r2 ?7 t
#include "string"     : {& ~" Y% C) p1 z0 J& x( X
#include "vector"     4 |* O4 S; m5 R* l
) Y$ [. @7 I2 f, f
//添加对ADO的支持   
. E1 N+ t. u( P! u$ [# l# q#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 6 h$ a3 Z2 q2 H0 B
#include <NXOpen\Session.hxx>- s# B9 r% I5 ~/ z& b% I2 Q

/ j, ]$ u9 }- }% a; t#include "uf.h"
( ?7 }- U/ `/ k* S# D( z#include "uf_ui.h"
; C4 R+ U* h, D#include <NXOpen/UI.hxx>" E- N8 q, H% ~& p# x
#include <NXOpen/NXMessageBox.hxx>
  V/ c+ g) x+ y#include <sstream>
& u( A/ _( f7 g/ C. h4 [" ~#include <NXOpen/ListingWindow.hxx>* k6 D+ n: ]4 Z; m0 \
using namespace NXOpen;
. F7 _/ W( |; b3 r3 B2 Ausing namespace std;
+ U! U# W1 ~( ?. w* n8 N* g' Cclass LinkSQL
4 T0 w, M, L2 {. k( |) d/ `6 D! q{$ ~& b2 j( ]. c( x
public:
! u# b; G4 f' F0 A; M+ b& O( v' f        LinkSQL(void);) W  o+ w: j/ ?" k: t, p
        ~LinkSQL(void);( e" A+ M. J  @* ^& U% j
        void OpenSQL();' G9 u& J" _- m3 ?' d
        void ShowInformation();
) U0 c0 B5 i2 a0 k+ c0 a- r/ L        void CloseSQL();6 O" J; `3 a# L( `; t
private:
7 p. I  T) t4 D' ~9 Z! a        Session *theSession;' l" V% i. l; ^( l0 i
        UI *theUI;4 @5 c: p+ j# ^* X: W
        _ConnectionPtr pMyConnect;* r/ k' l6 Z5 M# U- i
        _RecordsetPtr pRst;
* O* G6 W6 Y' f7 [' ?        stringstream ss;0 ?8 M2 j7 \; m" h" ~! j0 V
};
2 n) ?/ j7 g( R3 O; |5 v  b1 p) ]# J  B8 S- g
LinkSQL:inkSQL(void)
$ t2 L1 m" s: X. Z/ I{
- e6 B+ p, v- @" N: I% ~/ R        CoInitialize(NULL); //初始化COM环境              
; k- e, }6 W$ ]4 C5 {        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象    $ ]8 i2 v3 t$ n& Y" C
        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
3 `1 r7 ~" w' D+ @9 X" ^* ~        theSession=Session::GetSession();
/ N! f$ o( E! s' y: b        theUI=UI::GetUI();" @3 O( C: f/ w; q, T9 p8 m
}% F9 f; s7 f2 S; Y$ L
- D3 J& K# l. n$ v% K/ _

5 L, V0 p) u2 b) v; ?4 _LinkSQL::~LinkSQL(void)3 F, h6 U* t$ X6 M9 `3 `
{0 J2 o* J4 q+ t. p% z
}
1 z+ S# [$ N# k1 h0 I! X; |* \void LinkSQL::OpenSQL()
& s# F+ m" M- l3 U{2 a! p9 C; U9 ^1 ]
        try             ! L. D: F0 v$ ^3 t/ {
        {                1 M/ E" U* }* E0 W+ O0 D8 M/ N3 ?8 t. D
       
9 F6 d/ h( l; A- v2 G* b                /*打开数据库“SQLServer” */               3 ^! c9 a8 Q* l+ [. ?( _
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
; V$ V) b0 B9 H. O+ b8 `6 y/ i                    
" v' U+ I" V& G1 N- m        }   
) ]" n/ u& q$ _) G: M        caTCh (_com_error &e)            
* O9 J! r/ _! o9 r5 G- @  \        {               
$ |" j8 l8 U- L6 s0 ~* D, ]" T                 
/ [) @+ [7 |$ O+ {; L5 a                ss<<e.ErrorMessage();     
/ i2 q8 @. e! x; i! f7 m) Y9 u                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());3 k: ]0 l2 O' Z4 l: I" {) w
                ss.str("");" Q2 _. h6 U% G/ ^& m% J0 u; v
                            , i- W1 s/ v' N5 g" R4 D
        }            
2 i( O/ }  j. K% v' H" s                         
" ^' Y- c3 b0 J) R  U}
" N+ }5 J% a+ [2 {2 |void LinkSQL::CloseSQL()# ]! g4 T4 `- o9 R
{9 ]2 O4 J: W$ y
        try             + Q7 f% }5 q) {3 u( G" f6 G
        {                 
# F3 F3 s$ u1 F; u6 P  j
& \1 p. I0 M- F                pRst->Close();     //关闭记录集                  7 f6 J5 K/ p3 j7 x* ~" s; _/ Q0 _
                pMyConnect->Close();//关闭数据库                  
5 V! _) Y4 |# R, p# e                pRst.Release();//释放记录集对象指针                  
4 O; _' W' d1 p. l- m$ I! I9 ]& M; P                pMyConnect.Release();//释放连接对象指针   
8 W5 I5 H* b2 C$ \, l7 F        }  # e: F" m" l& E4 ~
        catch(_com_error &e)            
8 U2 Q, y; m3 V0 E, T' d        {                 
& `) H/ y; N4 ~$ p0 k                ss<<e.ErrorMessage();     
, c7 b  a* j9 r: @& S; _                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
' s5 n. C( ?; E                ss.str("");          0 A8 A% r" L5 C/ P$ Q& |
        }                   & g% h+ F1 @. h  H2 K: w
       
7 f; X# j* a( D7 h        CoUninitialize(); //释放COM环境   
) x; ]# s0 f6 x' t- Z- `1 y; a}' N6 G) P! `* m( A' y! y
void LinkSQL::ShowInformation()- z/ B8 b0 r/ y' Z5 c0 E$ a: O
{4 b; j6 i( v! U& j
  n! f; m; ~: r7 y! v
        ListingWindow *thwLW=theSession->ListingWindow();! }5 J6 H3 A9 Q9 C; ?
        thwLW->Open();2 v) b# O+ g" l0 f

. v) D! N3 D" ^        try& J0 D8 s5 k3 @" q
        {& d% ]) ?0 H# H6 ^1 J$ m4 {
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    % D* _, n$ N  g" d
        }( r: r! M( n- c& r  [3 D
        catch(_com_error &e)
$ A7 L9 Z- i6 q* z0 z5 |        {
: }. N* F1 c: |        : N2 [! C4 ?5 Y7 W
                ss<<e.ErrorMessage();
6 k$ ?3 |9 {( I3 U# X                thwLW->WriteLine(ss.str());
" t# Z5 M9 c; s- u# O5 k* N                ss.str("");
6 J- \) i$ x# Q$ K                return;
; O. K8 c1 r# M2 p) g5 h        }& F+ b& g& e4 s8 S1 t  e
}  G7 I' L4 s; j! b: s
//执行文件/ e+ n# q! q9 P  G6 o5 @. h; B
        LinkSQL *theLinkSQL=new LinkSQL;
( c. E; w% c/ n6 O1 H* D& }: e  [        theLinkSQL->OpenSQL();
  M7 U2 y+ A$ m9 f- [        theLinkSQL->ShowInformation();" i" S$ ~% m3 @
        theLinkSQL->CloseSQL();
" h3 G* R7 v5 Z- Z        delete theLinkSQL;6 L; g$ z! h5 m. @7 G

; e/ J6 W( S5 E: u! O哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了