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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件
" i4 D+ a: w  E$ q5 X( W0 P- a#pragma once# B* D) O/ L3 ~" s' q3 F  K
#include "iostream"     
1 o* W2 e) e& h# }) w$ n5 U#include "string"     : _  v% L2 H0 c9 e# w
#include "vector"     9 S4 Q% U/ I9 }- I& k. B2 k

) t4 O2 `. b; K2 b6 ?( s& E//添加对ADO的支持   ) S4 m- P8 h" J' W0 _1 n- v: a
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") # ?; T  Z9 H9 k/ T  x
#include <NXOpen\Session.hxx>. M8 S- D$ V) H% `/ P

) D- I7 d- l6 b7 |#include "uf.h"/ J0 W/ E* {; X. v' n  i/ H
#include "uf_ui.h"
7 A2 w& n2 f; ?0 ]#include <NXOpen/UI.hxx>& [6 j  @/ r: \" h- |5 F- u1 e
#include <NXOpen/NXMessageBox.hxx>
: N4 S: j% q" W2 l4 I#include <sstream>
0 h& \, u; W) v/ A5 f  c#include <NXOpen/ListingWindow.hxx># `3 W2 Q5 y+ M, t" J
using namespace NXOpen;
  r' g6 a2 H, @! U3 ^8 h# husing namespace std;2 Q; h+ N+ a0 k  G
class LinkSQL
/ Z- }: G) D  C& A/ e. E{( |! F. @5 f9 \( F' u
public:
& S/ H' I' q0 e& N        LinkSQL(void);
7 f2 P/ f# F+ C9 ~$ i* X        ~LinkSQL(void);
7 l& {% g: C% q$ _8 p# d* a6 p- l        void OpenSQL();, r- }/ Z1 c) O% |* O
        void ShowInformation();. D- N  _# {% [/ F1 p7 F2 s, t/ O
        void CloseSQL();- d: ~2 H+ q% a% J' p9 l
private:; `, g. u3 F" {- e, \3 s* {3 H
        Session *theSession;* \& V: X4 S& V6 f2 [
        UI *theUI;
2 B. a9 T7 p3 [# v! [        _ConnectionPtr pMyConnect;
5 D1 v* L4 s6 |- Q# h) w( J        _RecordsetPtr pRst;
' C- l* X  Z+ h/ g" M1 r( `( }; P        stringstream ss;
' C( i7 x7 d; v};
: E% [1 i# G1 g; f! c1 r. O, l& Q9 H1 X
0 V& A* b/ g4 aLinkSQL:inkSQL(void)
' @% l9 q/ `$ Y+ c; t7 {9 G{. s( A- y( L! k3 A; l& ]& Q% {
        CoInitialize(NULL); //初始化COM环境              ( R" H5 Z& C& O) n! t6 }2 w0 b
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
' k! M* ?2 v6 ^' H$ l1 H2 C        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
1 C. d: _& f" t+ J, G) P        theSession=Session::GetSession();
% t8 n* B. Y# q        theUI=UI::GetUI();: D: U6 p5 Q* J/ j
}
& h, z# ~" [7 r/ G; C! q+ c* p
& G9 D( E! w# R" E/ b' x* [
5 j5 M: W$ j& J4 C; ?LinkSQL::~LinkSQL(void)# z% {& Z1 r0 l# C$ e4 w3 f+ }
{; W* {( q$ I: O  ]  `, M
}
+ {) j  V( c( D; fvoid LinkSQL::OpenSQL()
+ p) M# }/ q8 \$ ~5 N{: P% s- q9 d/ f' `, o1 O
        try            
" C% s5 q8 ^- @        {               
; D: b! T- X  H1 p; @5 q+ E       
0 H0 N. V2 |+ r5 I) Z; ~                /*打开数据库“SQLServer” */               
2 V8 v5 s% x" e3 g+ {3 b7 ]+ v                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  
/ M. E3 h! v5 A* j4 b8 F: _' w                    * T& V8 F% ~# Y+ G- e
        }   . n4 F5 F- c4 j4 Z
        caTCh (_com_error &e)             ; b, t) c/ N8 ?" ?
        {               
6 q1 K5 r, X! m8 @                 $ N' y3 ]* q" O6 E& ?" ^3 k' Q% a. m
                ss<<e.ErrorMessage();     8 i4 m% n8 `* O# F  d, w6 K
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
0 B3 u( ?/ Z. _# w4 B& K                ss.str("");
; R& O2 k6 e# b, \$ b                            4 W' ]0 k$ r# S3 \8 ]0 h% c
        }             * N9 _- j8 B( J0 \" o# M* _$ I. e
                         
) b: Z& p/ U8 u1 d3 q( o}' d1 R. A2 i9 [: J' ]0 s: d1 L
void LinkSQL::CloseSQL()
& s9 `( {. l/ k5 |5 P0 `{/ V; m' G8 T* f
        try            
) m8 \# L+ D8 v& c# F7 A% ~2 q        {                 
* R# B$ o2 x# a$ m$ i& W4 T
  j7 l2 Y# h2 @  y! m+ t                pRst->Close();     //关闭记录集                  $ U  h  H( s  S' c: Z
                pMyConnect->Close();//关闭数据库                  / f! b) }0 J) R1 K* _
                pRst.Release();//释放记录集对象指针                  
/ m" ~. f0 }% b$ w- C                pMyConnect.Release();//释放连接对象指针   
' _7 M$ v. ~5 [& \        }  + H4 E9 K& n0 H% B
        catch(_com_error &e)            
% K. ]! c" X" ~$ K        {                 
* N' X4 S7 H+ n3 n0 X                ss<<e.ErrorMessage();     
7 N# G& R4 c8 N                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());) D. ]1 I. q# T" G4 w1 Y
                ss.str("");         
) T( w( |$ o2 ~7 \        }                   1 y( J. u: e7 T% e& c4 I) j2 U
        : T8 y: I+ W* H* @; A
        CoUninitialize(); //释放COM环境   
2 _( g& C3 o; w}
% Z* \* A0 ], O, wvoid LinkSQL::ShowInformation()) B/ }* O+ E0 f2 Y: e6 Z
{
  \* O+ `( W+ a' j$ \7 q" y* g' w* p9 {$ i
        ListingWindow *thwLW=theSession->ListingWindow();2 y8 X! ~+ g* }* r) e; b
        thwLW->Open();
+ K1 }3 A) _4 Y- B
$ M7 G! t* P" _" g        try
- B2 ?- P9 a. [        {
+ l! X) i2 }; W) `3 [* _+ u, t                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat   
7 q& n) n0 g( Q1 W& [        }
( v/ p3 i9 _+ o+ S5 T6 q# x: ]$ }        catch(_com_error &e)
1 h0 q  X( I) [' e8 C! Y        {# N/ Y& L3 E3 o, l( @, c5 f, ^7 w
       
$ M; b1 D$ g' j  M. e5 i                ss<<e.ErrorMessage();
1 G! |( |8 k3 x: C                thwLW->WriteLine(ss.str());
' y- R; T0 u5 O% a                ss.str("");' u; i8 T* l+ H! [9 j: J7 I
                return;
+ e- }% J+ d% d% D% E        }3 z* P0 q$ B4 \8 j* c+ F$ d
}" e' ]) e# Y3 \2 d' P
//执行文件
, ]0 k+ W$ d( I9 b        LinkSQL *theLinkSQL=new LinkSQL;4 C$ r# `+ B& X0 H& T3 Q
        theLinkSQL->OpenSQL();
+ b* r7 y9 X: h0 K) x' U; j        theLinkSQL->ShowInformation();
; d3 y/ F  c+ `' Z$ T        theLinkSQL->CloseSQL();/ u4 _3 ?4 ?, D' Q0 d; L* ?. x
        delete theLinkSQL;
2 w; j! D) x  [, V, n8 k* c- d
6 Z( |0 p  P! R/ }哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了