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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件$ A; @: d: ~, b; n
#pragma once! l. d/ f3 b, @! v) j
#include "iostream"     
) ~0 f4 f9 U9 K" ~8 K#include "string"     
  `% I4 [7 _3 O* s6 e#include "vector"     9 c$ O0 p, w2 J/ g  y0 G+ v( j+ ]

8 q/ Z$ P/ X" F$ Y- k. n//添加对ADO的支持   
2 \/ v$ M! R, I7 P- \/ R5 h#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
! B( T3 V: L: A8 M#include <NXOpen\Session.hxx>, n) L# A3 x& ]9 [# z
1 t. P" g6 N' Z) l
#include "uf.h"
5 X( ]7 S. r; N7 r- l% l# `#include "uf_ui.h"
# ~( Z+ F$ m5 ^4 ~7 y5 y! o#include <NXOpen/UI.hxx># w$ F1 D6 B+ {8 o; |0 h8 T0 ]' p2 y
#include <NXOpen/NXMessageBox.hxx>  m1 i. V1 m1 s
#include <sstream>
9 I/ _6 {: P: x' b. S#include <NXOpen/ListingWindow.hxx>
7 s! J9 X. h. y+ Yusing namespace NXOpen;. l3 h+ p2 b% H- c4 s6 y. k" K
using namespace std;. w6 u& ~% c: s% W. M
class LinkSQL  {6 O+ V# ~7 Z* L# U
{7 J$ {4 p( O% q0 j& J
public:4 ]1 n1 H6 \' |% b, i5 s7 i0 [
        LinkSQL(void);
  P5 p$ }" E6 T4 J# z/ \        ~LinkSQL(void);4 r4 d5 ?; I; O+ p6 i2 T! H
        void OpenSQL();
( {; ]  s5 t3 F& ?        void ShowInformation();" `& D+ n: R5 s) c: ~* b
        void CloseSQL();
8 N' ?* X0 b, K% hprivate:* O0 L% P3 ~5 b: a& H
        Session *theSession;
% Y5 F7 @% B: c2 d8 @6 A" Z" i        UI *theUI;& P( F/ U: ]/ S
        _ConnectionPtr pMyConnect;
! F2 g$ c3 r% r" P        _RecordsetPtr pRst;
! X) U( l% [* b        stringstream ss;& d% k3 q$ I  s+ ^5 H4 M% Y6 z
};7 C4 ^1 L% H* z8 }/ U, |
3 z; k8 d+ [2 O5 b6 p/ d
LinkSQL:inkSQL(void)/ T6 z9 k6 P1 A5 f
{
6 {7 e2 w, w& H& b' ^  l8 @& X3 `        CoInitialize(NULL); //初始化COM环境              7 {+ |4 U$ p2 B& O1 y& S2 t
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
" \& U2 ^1 ?1 g; W5 \* n        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  0 Y7 J7 s& b1 k4 P2 u' J
        theSession=Session::GetSession();+ s7 @8 R( {4 x& {
        theUI=UI::GetUI();6 g( W" l. |8 X7 C7 l9 w1 K
}" {0 o' q$ g5 g- X

: t- T# F. r% `/ \9 Q( q. Z' A* ?4 w! A' G% H7 A8 F( M0 B
LinkSQL::~LinkSQL(void)* Y0 E7 x6 j, p* ?; h6 N
{. }+ [0 ^8 A6 v2 t( S( J
}
4 W6 p7 ~" U2 P6 ?  n, l* V, ?void LinkSQL::OpenSQL()
$ ~' l% V1 O  j0 Y% s+ n' ^{4 c5 m9 G8 v- U) e& |0 u7 \9 k
        try             ; i- E" I% {2 H* X
        {               
& u  X5 A' E4 m4 r" ~6 u( ^       
% r* X7 r9 |4 t2 g                /*打开数据库“SQLServer” */               " W" R2 h% I5 }, v
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  / b: T- K# r) r( S# e- x3 Q
                    3 K$ `7 q2 v0 O% Y4 Z4 B$ i+ d
        }   
$ w9 n$ y1 G0 V# n6 R4 v        caTCh (_com_error &e)             * \0 [! I$ Q( X9 v2 ?' y' \
        {                $ o: B- O* R- b3 z& h
                 
  d- j4 [. t" u                ss<<e.ErrorMessage();     
+ \4 V( \- T+ ^& V& Q) o                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
5 ?, ~1 q7 ^- @& E- t8 L                ss.str("");
* O4 n! ~! @# ~0 t3 f                           
$ n$ R8 L) l# u        }            
8 f+ s. a$ K6 m: U3 ^, p" g. |                         3 B4 b: q; G* Y( L
}! r( \0 F+ i4 ]* l/ W
void LinkSQL::CloseSQL()
# b) n4 J! J7 x4 G; I{+ G: A* c( y* h, Z1 Z& E6 \3 Q
        try            
: x7 e5 L9 U$ K3 [* ?/ A        {                 8 [: J7 }6 \2 D

9 o+ v6 I) t0 T( g+ \) _- ?                pRst->Close();     //关闭记录集                  
3 S% A( j  Z: u3 U" T                pMyConnect->Close();//关闭数据库                  & H8 [, L4 z* X& d+ ^
                pRst.Release();//释放记录集对象指针                  
( z3 }1 |8 X; U% J& M0 C  ?                pMyConnect.Release();//释放连接对象指针   5 o3 F1 q4 X, y* g! n$ F6 b
        }  5 u& w/ `) c# G
        catch(_com_error &e)            
8 l, m$ C. A3 _+ [- z. P        {                 6 B$ c0 o( p" t3 o6 a
                ss<<e.ErrorMessage();     ! K% f8 F. ]' J9 ^
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());! S. T2 s' A: y9 s
                ss.str("");          # B: ~6 i/ `, r' X% @  o
        }                   9 g. U! Z' `( y' F8 X( K0 @
       
# \! X& @+ @- D. G2 R( G  Y2 l        CoUninitialize(); //释放COM环境   " f9 k/ E( g. Z6 Q: t9 O& b2 g
}. A( R- G  L; K/ @' g+ ~" U  V
void LinkSQL::ShowInformation()
7 r: m& b; e; o$ y{
0 u' M0 w7 f9 r8 q- @) G
, w' Y% N2 U5 S! t: }% u        ListingWindow *thwLW=theSession->ListingWindow();. p6 n9 r3 V9 f  Z
        thwLW->Open();6 w+ `# ]3 D1 O/ l. z6 t& i4 {

& c* y! ^; c' Y9 O3 ~; C        try  Y5 M! ~" {  l/ ]0 Q; t) Y7 T
        {
, w. Z. p2 f) K+ y9 \! Y, J* i/ c. ?                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat   
/ X2 |* m* Y& y( k9 Y+ q        }/ n8 ~2 u' A; }0 r6 f5 T
        catch(_com_error &e)
5 v8 K- _7 q; L# {6 t$ l! Y        {" p, c3 B9 z' v! l; C- S# |
        " f1 Z. _+ e# e# T* s
                ss<<e.ErrorMessage();
5 c. l7 u, S/ Y, o8 R                thwLW->WriteLine(ss.str());2 ?8 y. a& }7 P2 i& E
                ss.str("");
+ M" M4 q* H) o2 T4 m1 g/ |7 J5 v4 P+ b                return;
; Q7 D/ F: \5 y) V# Q% h        }3 P) a4 g3 ?. R( ]% E" B4 ?
}
/ _5 \7 G- |. E: d) @3 r//执行文件
( {9 z/ S. Y3 t# T4 L        LinkSQL *theLinkSQL=new LinkSQL;
0 O9 C( q/ J2 z! w2 J" r1 Q        theLinkSQL->OpenSQL();
/ \5 G0 I/ L0 _  Z        theLinkSQL->ShowInformation();
7 C2 E0 |* _% Q/ \% }  n" d        theLinkSQL->CloseSQL();" f$ `, J5 \/ }+ n- H0 t
        delete theLinkSQL;
# Z+ ?& ~. u2 e, ~. b: g3 O3 [
  X! v, F. @+ y: ]哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了