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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件
- y: W. y) m3 p7 u3 k6 ?#pragma once; W; m- X/ p. h" g
#include "iostream"     
7 p/ D- q$ j4 R! t* G/ a' `. E#include "string"     
. P" U5 w4 z% f6 k#include "vector"     4 ^+ T/ r7 y4 K& ]( y5 P2 n

+ H5 ~; f  W  S( c7 J3 S8 U# x$ Z# i//添加对ADO的支持   : ]& U$ I2 _9 o, {, g# v
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 3 Z7 |3 O6 Z( E2 y" ^
#include <NXOpen\Session.hxx>4 O, j. ~1 t1 k) r1 C

* p% Z2 D- r- [) o9 t% U9 i# F4 c" T#include "uf.h"% |. s. k/ Z+ B' b/ I
#include "uf_ui.h", o) G+ S2 a% a* x5 P& K
#include <NXOpen/UI.hxx>
2 F) @2 b2 U! P1 D#include <NXOpen/NXMessageBox.hxx>
5 I0 V5 ]4 K% Q' P' j#include <sstream>
3 ]! y& i& Y$ k- T. O  r" E#include <NXOpen/ListingWindow.hxx>9 u' ~4 k5 J) T$ E' P
using namespace NXOpen;1 L8 C% m3 s* k6 L' c
using namespace std;/ ^0 n! ^6 i( Y- I
class LinkSQL/ Y5 W& t$ e3 R4 J& K& G  u
{
. a$ ^1 o  |% j2 E3 u$ Epublic:
$ Z% O+ v" x( r% ?& V        LinkSQL(void);" _* A. _9 C, q
        ~LinkSQL(void);
4 B% |& C$ j2 `- w        void OpenSQL();5 G2 J9 r2 P; w9 u2 d
        void ShowInformation();
$ d$ J* t  H( O4 S: \6 a& x        void CloseSQL();9 ?7 B  o# |( A8 V9 f) S2 a
private:
) C/ C. _* {% Z' ?        Session *theSession;
# m# P1 U# Q0 r! t" m9 Q        UI *theUI;
( V- z) _8 v; H" ^) [) s: v( r        _ConnectionPtr pMyConnect;; l- i! e7 D+ j1 e2 Z& ?5 U( y
        _RecordsetPtr pRst;
) H" d7 d- l, j        stringstream ss;$ Q/ R2 s" C; \! n/ O( n8 V
};
* W8 Y, h* P  u$ G$ `7 u: E9 X
& m8 j( I( _6 ^& @. NLinkSQL:inkSQL(void)
2 ^9 w' }, j9 o# A; s7 x; z" u6 o{2 D7 R$ z) j( M
        CoInitialize(NULL); //初始化COM环境              
# S1 m5 |/ r7 f& |) R# b+ g, i0 s        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
; U+ t% O3 J9 C! W        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  
# M( ]7 r; C; E# I: {9 u        theSession=Session::GetSession();
! p* |7 a0 o, N3 v3 n        theUI=UI::GetUI();- S: s( ^5 i$ Q. i
}
1 Y7 c' e' P3 B) {% T- ~  ^
6 _2 g' a% }' M! b8 G: D' n+ W6 |! y4 `  C. M
LinkSQL::~LinkSQL(void)- B; i% D; T9 w, b6 _
{
( X% L4 l  e: |3 E}7 F0 v2 Q8 n. v
void LinkSQL::OpenSQL()
% H/ U/ h7 S) h{2 |9 d% T  e- S8 T( y4 ~# z
        try             7 o% X- s) k6 L
        {               
* V* B, Q1 L6 V% G& [        ; L1 x" C5 O: i+ E# d3 c) l% ]
                /*打开数据库“SQLServer” */               & W$ ?! h0 e  p
                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);    v9 }& y3 y4 r2 T9 j) A, W
                    
8 r7 e6 a" j# j4 V        }   
$ d$ d5 H8 r8 B5 W        caTCh (_com_error &e)            
3 ^$ ]3 [) Y( |$ B+ E8 p  k5 O        {                ) c5 X' H0 t. b8 a1 d3 A
                 & q4 b7 ~+ o/ J0 r
                ss<<e.ErrorMessage();     - ~; @& ^; `7 b3 ~
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
: I4 p6 P' D4 ~  J2 h                ss.str("");
5 E% L) {1 N, y0 j1 D5 s# I                           
, i, b# X. B% g7 X$ d8 }% T6 A        }             5 i: G0 w+ V- W; m- o
                         
2 G. R3 |5 U3 g- [6 n! s}
, ~7 S% t3 Q( p  ~- J) Lvoid LinkSQL::CloseSQL()! B& T6 a. k4 ?0 y& {4 y
{3 F% n/ X: ]& x
        try            
1 n' G' n- ?& ~' |! C+ K1 s        {                 ( ?% J  p+ K. b. ]0 D6 W/ ?+ d

0 A, c0 q& h/ R0 z                pRst->Close();     //关闭记录集                  
* L+ n7 o* Q: |; a  e3 R2 A& u                pMyConnect->Close();//关闭数据库                  " K* P2 W2 z. Z# K+ ^- G- v
                pRst.Release();//释放记录集对象指针                  
) {, h# ~6 k" Y8 r3 g, Q6 p0 P% I                pMyConnect.Release();//释放连接对象指针   6 ~; E# C" W% O1 g6 K, }
        }  / B- R# e& s& c! {6 R$ Q
        catch(_com_error &e)             % b- A5 |- h/ l% |* J  Q: t
        {                 2 @5 k" j# q( S$ t2 Z
                ss<<e.ErrorMessage();     
! U8 v9 v& l7 v' ^# g' y* ?3 [; B" ?$ x                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());2 l& j' |# {7 G" W2 a8 ~3 ?
                ss.str("");         
& d! m6 W% J% U2 U! J; q5 A        }                  
  R6 k7 n5 u7 R, x       
9 h* U2 R/ v7 J3 I# ?        CoUninitialize(); //释放COM环境   ; O. q0 s# U" J6 Q, l' ?
}2 c% I7 q2 i7 }
void LinkSQL::ShowInformation()
, P# I% W3 N2 J3 ]* @0 U{3 T+ L1 G! a8 e! g# f% h

% |, c3 f8 W, B* }! Y        ListingWindow *thwLW=theSession->ListingWindow();
' L  ^0 Y7 @# N1 ~" Z        thwLW->Open();/ {! O5 A' p2 e( D# F% z
. {7 S7 G+ {8 b( Z! m' }
        try
6 I2 t' S% z$ _$ g8 S0 e8 `. l        {
. m/ u7 B% [* @' d9 K% B3 G  @                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat    0 k. j$ N; n7 [' Y
        }
" W6 [8 K+ K; Q) ?! {        catch(_com_error &e)
# Q0 l* H; w& P        {3 x5 y: E4 z3 {
        $ E# n: m' v: Q* d- j
                ss<<e.ErrorMessage();& y) }! F4 J! W) _
                thwLW->WriteLine(ss.str());" w6 Z1 S1 Y$ s7 T. E
                ss.str("");# ~' P. t! O4 m2 u% S& d
                return;
* `2 S7 v# t$ P' r8 b1 B0 l  {        }" Q0 d6 v) y0 ~( ~+ T# ?) q
}& L( M( |! g$ }# i
//执行文件
, R4 U# l% b+ c! |# O. J        LinkSQL *theLinkSQL=new LinkSQL;; X( q, W+ ]2 E! o
        theLinkSQL->OpenSQL();3 h+ w8 _2 C/ i2 z
        theLinkSQL->ShowInformation();' _1 B3 c$ A: {, J1 X
        theLinkSQL->CloseSQL();
' `4 C1 N7 q& l+ s* |1 ^* g        delete theLinkSQL;
8 R' l6 q+ C6 F# p, T3 ~6 S; m3 ?) `" 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二次开发专题模块培训报名开始啦

    我知道了