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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件$ [! `" A" B, [$ ^
#pragma once
- c+ {3 O- C0 `# V( N' W$ A' [* W#include "iostream"     
! Z$ Q' v" z8 X" G- n; z" b) b. g$ P#include "string"     5 e( E. ?" C8 Q! ^$ a7 _6 m9 E5 p, ^
#include "vector"     8 t2 x7 c, R6 Z  o3 C: W
3 O, a6 r8 Q: G  V% K
//添加对ADO的支持   ) {* k2 y5 \9 d; C
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
0 l! O4 l  N( ^. Y: y2 v#include <NXOpen\Session.hxx>
% G+ d9 J  N! p- i
! G- h+ E/ `& j#include "uf.h"
* {0 C$ N* P6 i( a( K#include "uf_ui.h"
5 q$ `' r/ C! p5 e  \* H#include <NXOpen/UI.hxx>
# Q. @4 @6 D+ ?: @#include <NXOpen/NXMessageBox.hxx>( c0 W% U) z3 W
#include <sstream>
% B: t- A) W2 R7 Q& _7 R8 N7 H#include <NXOpen/ListingWindow.hxx>
% {' w; w" p; M8 ~8 ~3 }2 J1 \0 h- Iusing namespace NXOpen;
( l. k9 I) z+ iusing namespace std;
7 m. D8 p% T8 l( b+ y) A+ Qclass LinkSQL
- a- Q8 a' B, ~# e# ~{) u7 O2 m# @) l, i0 |
public:& }" w0 O: d0 Y; m9 |
        LinkSQL(void);
8 _2 T/ A: B9 Z1 R: q/ n        ~LinkSQL(void);
7 Y7 [6 }9 E2 c1 Q1 ]        void OpenSQL();
1 @! A/ a+ R4 s- p' Y4 p        void ShowInformation();
4 B  T9 `& F+ D* T1 y2 k        void CloseSQL();# X8 K$ N7 {5 H, S# e" q' ?& {" \
private:# o7 }0 J1 l: |' H
        Session *theSession;1 v6 ^8 B( r, K$ z; ?2 u* ]
        UI *theUI;, w8 ]$ P- c  J, E9 m
        _ConnectionPtr pMyConnect;6 P. c! H, ]- m* _- |! E- H& c
        _RecordsetPtr pRst;
4 I! R4 N% C  W        stringstream ss;6 [6 w, P- _; j# H% r
};
) v, l. C- M9 A" e* P! t$ v+ r
3 @, P: q3 U! @* j, W% ZLinkSQL:inkSQL(void)
' a4 J$ _. w6 Y/ o+ U0 M{
, `' `0 U" S" A! Z- w! t$ v        CoInitialize(NULL); //初始化COM环境              6 v9 d, V6 @: C9 Y) F+ ~
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
7 h- H. g- i4 H/ Y6 d6 q# u& j" M, h5 l        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
. q% h. T% Z/ ]8 {/ Y        theSession=Session::GetSession();
0 |" I' E/ Q/ l! `8 c        theUI=UI::GetUI();9 q2 v, U/ @3 C& G: p
}6 U! R: x% p8 Y5 P
% b0 r" M. M* u' w

+ q2 {! E& c9 U# K, qLinkSQL::~LinkSQL(void)
; I9 D  M9 X! K; e2 D{
+ Z8 Q# U7 c( R$ S! C. o/ y. f8 D}
( e2 S3 w) ]2 H' k: D6 Xvoid LinkSQL::OpenSQL()
$ \# P1 A- @; D( O6 ~( w{
$ y1 P5 a. {3 K/ U0 \        try             # [0 x) h2 j7 B) @( a8 H
        {                + h5 z5 }* ?7 ?
        % h; a7 q  i4 u& o1 ]$ I5 {
                /*打开数据库“SQLServer” */               ; ~( [' @/ K9 S, b5 y' p
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
1 h1 y# H. w* O0 W3 E  q; W                    
" F* H  m; N  t        }   
+ w0 `: J3 Y; r& G        caTCh (_com_error &e)            
* j* S, }$ V8 }5 n5 o        {               
6 c; a- V' S5 B, Y8 u8 W; U1 W                 0 V6 a8 X; l" ?1 u8 C
                ss<<e.ErrorMessage();     ; C2 x- @' t8 K1 C, ]2 \; Y5 x9 Y
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());& e! U3 o3 ^! a/ q$ |2 P+ N5 c
                ss.str("");) K3 t" E  k7 j" q1 d: X% R0 V0 k
                            # y# n! j; B7 j7 X) S. v7 {
        }            
& F1 |& {& K- c  P+ j                         7 W' K/ x, n# ?. B: ?
}7 p% b% X' e/ G7 U# M9 K
void LinkSQL::CloseSQL()
2 z, u" Y7 ~" I$ W+ ]7 ^{
# D+ H4 v( s! \! u        try            
5 I% m' ]( R% X        {                 ) D; n  B4 b+ r; o4 G0 @6 H5 T

/ m9 o: b( e! ]                pRst->Close();     //关闭记录集                  1 v7 J6 ]# m1 J
                pMyConnect->Close();//关闭数据库                  & _5 V$ Z; f6 ~! M9 u
                pRst.Release();//释放记录集对象指针                  
8 d8 B. [9 D0 A5 e2 F                pMyConnect.Release();//释放连接对象指针   5 j3 z. a  j: t5 C
        }  
  c1 [) u  ]. P" V. b8 r$ ^0 {: P4 n        catch(_com_error &e)             9 C7 H4 S+ x2 @* i; f6 ~( ?
        {                 " Q% z2 F9 @4 k' t* q' T
                ss<<e.ErrorMessage();     2 E1 O" K; q; g0 S' p$ V; D
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());% s2 V  L( J& x  B$ d( y$ @
                ss.str("");         
# f& a) h7 D( R7 m4 i4 y8 K        }                   0 h) e& f5 G' f! O2 Y( l4 Y
       
5 M$ n1 E5 I! B' M  A& {: _        CoUninitialize(); //释放COM环境   & M: x2 x: Y4 p; J5 m
}
: }6 s/ p6 h# b- d5 U/ }void LinkSQL::ShowInformation()3 l+ |/ {, {- I9 v$ ^" v
{& T$ z2 j8 o: \% k5 p

' h# Q% A+ w) s' v9 t, ~% p$ @" ~        ListingWindow *thwLW=theSession->ListingWindow();! z- I. ]: P: r2 c3 u7 i" U
        thwLW->Open();6 x7 G  B1 T' [; [  s. E
$ F5 M  T) T8 x: Y: T
        try0 M# B( o8 u) n& v: |4 p2 z* }
        {: {3 n( i/ \9 g9 c8 C
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    ) j0 e+ K3 S& K2 k: ]& c
        }
3 g9 r, z+ C& V9 P+ P/ R( L$ r        catch(_com_error &e)
6 L! S* a6 E; N        {0 a' X$ A) i, a7 _
       
8 |& O. F  x9 t! y/ }9 P( u# f" P/ F                ss<<e.ErrorMessage();* ]: l. F! m5 t9 s% [+ g5 B5 {) O
                thwLW->WriteLine(ss.str());! L* r, N5 a( b( u0 Z- o$ j# d1 t; E
                ss.str("");3 _* j9 C; ^8 {* a5 H. Q1 l7 c
                return;
8 F# ~* j6 p0 Q' a        }
0 C* t' [: y; U9 B}0 c0 v' |+ r  c# G
//执行文件9 b$ b8 {) y% i7 ]. h
        LinkSQL *theLinkSQL=new LinkSQL;
& v% J0 \3 X" Q, k& g2 S+ |        theLinkSQL->OpenSQL();
8 o& h  j7 {# v) l9 G$ `        theLinkSQL->ShowInformation();
* ^7 J# n) t1 B8 U& R3 M& u9 o        theLinkSQL->CloseSQL();
+ n7 q# A0 F+ b! H4 z1 [& q! _        delete theLinkSQL;
5 e# b3 t  f3 h( W: p, I. G' r$ R% A' _% l3 t
哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了