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

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

[复制链接]

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

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

xiao2076 楼主

2014-10-17 08:11:57

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

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

x
//类文件
/ Y7 w: p( W- c7 W4 S8 `  {#pragma once2 Q6 f0 z$ P- s/ n/ P, b; h
#include "iostream"     0 g! G! j' i! Q  ^
#include "string"     
! H# g. t6 n6 F  f#include "vector"     
" v; w0 d$ K$ [2 F
7 S0 J3 p' ?" x- Z0 i' y: `3 I//添加对ADO的支持   ! `" v( A3 h0 A- @8 L
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") . i6 D' Z3 B: u3 N6 y- w
#include <NXOpen\Session.hxx>
2 D# J, c5 M8 Y& W1 z" T$ N8 I/ B  d& ]6 Y+ |- ?" B1 _( O1 K0 x
#include "uf.h"
7 h6 U6 N! {, k% H% \- m  p9 ^  Y#include "uf_ui.h"; O3 w8 ^: e, |1 k: [" j2 e* {
#include <NXOpen/UI.hxx>! E5 K: ^+ x% i* s
#include <NXOpen/NXMessageBox.hxx>+ d: ]' v5 N* W! [* }$ g7 W: V+ X+ K
#include <sstream>2 O* h/ P# J4 `2 i- ]/ q9 F0 |  z* g
#include <NXOpen/ListingWindow.hxx>/ _/ c/ [, }/ O9 h) ^
using namespace NXOpen;
6 y/ x1 U" N) q' a" X4 |/ |using namespace std;4 m1 }; G" J6 H( Q9 M5 m% K- ^
class LinkSQL% @# p) o* T) d
{$ g7 T( u: Z% G
public:
1 f# g* Z$ w2 J% e% `0 ?0 v        LinkSQL(void);6 V! Y' Z* S. c7 A9 f, J+ Y. ~9 @
        ~LinkSQL(void);# x  k% z- h9 f  p6 R/ K# E
        void OpenSQL();
- B2 Z2 b# O  C% x5 `0 q        void ShowInformation();: O" _  W$ G3 B: t1 Q
        void CloseSQL();
8 h9 J: B5 U5 R: x7 k4 Aprivate:
# X$ B, T0 L* R% V8 x        Session *theSession;
' x" q% {5 E+ u        UI *theUI;
; S8 A3 v/ d+ V- R! g        _ConnectionPtr pMyConnect;7 s4 x( P* F0 b: a3 ~/ ?% d
        _RecordsetPtr pRst;
5 I; I6 T: U/ U1 b" o' e0 v( O        stringstream ss;4 N, [' k6 @- G9 H+ w& W2 i' R5 M
};
; B* z" z# a9 R" H  M2 q, r- B! i# J% K9 D# U2 V3 G7 K5 ]2 I- r4 _
LinkSQL:inkSQL(void)
6 a. y. O1 N5 `  }$ ]* i{
" ^9 o& p# S! s0 x/ i8 r        CoInitialize(NULL); //初始化COM环境              . m  {& h3 D1 W2 s
        _ConnectionPtr pMyConnect(__uuidof(Connection));//定义连接对象并实例化对象   
( ~, i5 j2 J- j4 S7 z        _RecordsetPtr pRst(__uuidof(Recordset));//定义记录集对象并实例化对象  % p5 ^$ m' H5 }  o; A
        theSession=Session::GetSession();& G, F/ u7 r+ o2 N2 O
        theUI=UI::GetUI();
0 h$ J. E0 x+ x# V}
( l" `  U1 |, u# C7 H7 f% o2 F1 v$ [# Q& a

0 q; M: X1 @& i% D; _$ nLinkSQL::~LinkSQL(void)
) A; L# K$ Y  e0 ?' z- W! Y: D9 i# }{7 s+ J" F. f2 \1 [# R2 @& U
}2 S6 _0 y6 A1 E- Q; V
void LinkSQL::OpenSQL()* x% ^1 Y$ q% A7 [7 X" r4 s
{
3 y1 i! Q3 U0 B2 F+ ~* M8 B% Q        try               d* ]" U) X. s- O5 N; M
        {                6 l- M" [3 J2 D; @2 s; b) |# m
        6 `4 _5 y' T5 T
                /*打开数据库“SQLServer” */               
1 H- G" L% |0 n! O! O$ u                pMyConnect->Open("rovider=SQLOLEDB; Server=192.128.28.32;Database=test; uid=sa; pwd=123;","","",adModeUnknown);  % |+ q! O3 n4 L3 c6 q2 @2 R
                    . n3 u; U$ S0 M
        }   
$ M8 K- X; N7 r: n  q        caTCh (_com_error &e)             1 N& {# `! k# a# V
        {               
9 K5 c% m' g; c4 M1 R' }                 
& V; Z; N1 X" \$ g. D8 q; _                ss<<e.ErrorMessage();     
& ?1 _, K- z9 j5 r0 B: y                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());& [6 W. t9 V3 p2 C& s7 U
                ss.str("");
- c0 P% v7 q  Q                            # ?, i7 O% Z( |4 v6 |1 K( g
        }             3 w' [6 {) D; A9 o
                         ! ~% c. R* C0 E  Y9 m! y
}
3 w  I% C  K0 f, V  X1 ^void LinkSQL::CloseSQL()
: y! e1 P/ @5 j8 `6 g{
  @, c- N! ?( E5 b  j5 {        try            
0 q: J$ Y( _( F* a2 F        {                 9 P1 K% ^, ~3 k! a$ D

8 d  w, N) ]7 ]' J! K4 n+ H' n                pRst->Close();     //关闭记录集                  ! y  e# s1 m+ }3 ]' y; L6 M
                pMyConnect->Close();//关闭数据库                  
) M7 L- h: V% M+ [. N  i                pRst.Release();//释放记录集对象指针                  
# _1 `7 C# W% _* Y# j$ f, `                pMyConnect.Release();//释放连接对象指针   9 w4 f" J/ d: ~% Z% Z, w' c
        }  
- V  ?( i* F( w3 L8 v7 X        catch(_com_error &e)             ; \9 A# x3 C5 m, L
        {                 
7 N* Q( L: p7 F                ss<<e.ErrorMessage();     - E. q2 }) K) E" w$ v; X
                theUI->NXMessageBox()->Show("系统信息",NXMessageBox:ialogTypeError,ss.str());
$ W9 z" I6 f9 Y: z% X$ \                ss.str("");          9 S6 I& @9 |( @# |* @8 q' ~
        }                  
* |$ U6 F5 f3 J3 y! @       
* o# a0 Y4 h0 g7 Q% m1 A6 _& [        CoUninitialize(); //释放COM环境   ' Z, H) i, }- r. n
}8 x0 h1 X+ ]# b3 [
void LinkSQL::ShowInformation()& d9 f% j1 S3 M
{
4 D0 J$ }/ d4 p% s) g- g# x. ~$ `( Q* I5 n7 W7 x1 T" D
        ListingWindow *thwLW=theSession->ListingWindow();* y$ t, x, o- Y; ?/ X7 ^
        thwLW->Open();
/ b. A6 L; B  n' c; N5 d: b3 v0 ]- H; v' V7 j+ h4 t: r
        try
$ |+ i4 {* J5 ^* K1 H        {; C7 J8 V) r8 X5 l/ ]9 B
                pRst = pMyConnect->Execute("select * from 表格1",NULL,adCmdText);//执行SQL: select * from gendat   
( s  a2 ~- v( n5 A        }8 H: G0 A4 p) p/ `4 `1 x
        catch(_com_error &e)) ^. y) B& p% m7 [# S4 g- _
        {
8 l) i4 v) d( n( I& p  }& @       
+ z# G4 V4 N( u4 N$ B7 b                ss<<e.ErrorMessage();
8 m6 M, G* a5 V. ?                thwLW->WriteLine(ss.str());: R& W0 G; R. c7 ?  H5 t" }1 K/ X
                ss.str("");+ y; Z6 I7 z8 m$ l/ s, J: g+ x  t7 ^
                return;
( Y+ E8 z1 v; V' a# u        }
/ j, J. X+ S; k$ U}
* V& ^) N3 i) S4 C! @8 [" u. F( g/ N//执行文件. d! W" i2 M! P4 A. n
        LinkSQL *theLinkSQL=new LinkSQL;2 E+ E$ I  X; M8 k! G
        theLinkSQL->OpenSQL();
& N  b8 J1 D3 I- Q, J        theLinkSQL->ShowInformation();
8 |& ?, _0 {9 }        theLinkSQL->CloseSQL();5 A# l/ L) _$ z, t9 z# o5 Q
        delete theLinkSQL;
' M- i1 Z: S; S* L, X# d7 ~
. M; ]$ l* z* |+ Y% n+ x' m哪个地方出错了,在控制台程序的时候没问题,在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二次开发专题模块培训报名开始啦

    我知道了