我用SDK写的一个小程序,怎么用ADO 连接不到SQL 上去(来者有分)
我对SDK不是很熟,我的做法是这样的:
先建一个win32 Application 的"Hello word "程序,然后#import ,
.cpp 是这样写的
include "stdafx.h"
#include ".\res\resource.h"
#define MAX_LOADSTRING 100
// 全局实例及主窗体变量
HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
HWND hMainWnd;
_ConnectionPtr m_pConnect;
_RecordsetPtr m_pRecordset;
char *m_pCMDBuffer;
// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
...
//初始化COM
if(!AfxOleInit())
{
AfxMessageBox("COM Error!");
return FALSE;
}
HRESULT hr =(HRESULT)0L;
_variant_t RecordsAffected;
char buf[100];
try
{
hr=m_pConnect.CreateInstance("ADODB.Connection");
TRACE("%d",hr);
DWORD dwError=GetLastError();
sprintf(buf,"Driver={SQL Server};Server=%s;Address=%s,1433;Network=DBMSSOCN; Database=master;Uid=sa;Pwd=%s",cfg.szHostIP,cfg.szHostIP, cfg.m_DbPasw);
if(SUCCEEDED(hr))
{
hr=m_pConnect->Open(buf,"","",adModeUnknown);
}
}
catch( _com_error e)
{
AfxMessageBox( e.ErrorMessage());
return FALSE;
}
...
}
其中
hr=m_pConnect.CreateInstance("ADODB.Connection"); 有错误。
hr =-2147221008
GetLastError返回是2 ---------找不到文件,
我用同样的方法在用MFC的程序上是可以连接到SQL 上的,而我把上面的程序写到InitInstance 里也是一样。
不知道是什么原因??
问题点数:100、回复次数:18Top
1 楼ZHENG017()回复于 2002-10-18 11:57:48 得分 98
把if(!AfxOleInit())改成if (!CoInitialize(NULL));
Top
2 楼feifei2001(鼠标)回复于 2002-10-18 12:01:51 得分 0
楼上,到这了:
AfxMessageBox("COM Error!");
Top
3 楼feifei2001(鼠标)回复于 2002-10-18 12:40:52 得分 0
upTop
4 楼ZHENG017()回复于 2002-10-18 12:46:43 得分 0
sorry.it should be:
if (CoInitialize(NULL)!=NULL)Top
5 楼ZHENG017()回复于 2002-10-18 12:50:18 得分 0
帮你调了下:
in stdafx.h
add this:
#include <comdef.h>
#import "c:\program files\common files\system\ado\msado20.tlb" no_namespace rename ("EOF", "adoEOF")
in cpp:
_ConnectionPtr m_pConnect;
_RecordsetPtr m_pRecordset;
HRESULT hr ;
if (CoInitialize(NULL)!=NULL)
{
MessageBox(NULL,"COM Error!","COM Error!",MB_OK);
return FALSE;
}
try
{
hr=m_pConnect.CreateInstance("ADODB.Connection");
}
catch(...)
{
}
CoUninitialize( );
return 0;
}
Top
6 楼feifei2001(鼠标)回复于 2002-10-18 12:56:34 得分 0
好了,结了,Top
7 楼feifei2001(鼠标)回复于 2002-10-18 12:58:45 得分 0
还有错误,退出时
Runtime error!!Top
8 楼ZHENG017()回复于 2002-10-18 13:03:08 得分 0
把CoUninitialize( );放在WndProc()中处理WM_QUIT后调用。Top
9 楼feifei2001(鼠标)回复于 2002-10-18 13:17:44 得分 0
还是不行,好象建立了连接后不能return
Top
10 楼ZHENG017()回复于 2002-10-18 13:22:32 得分 0
m_pUserSet.CreateInstance (__uuidof(Recordset));
m_commandptr.CreateInstance (__uuidof(Command));
m_commandptr->ActiveConnection =m_pConnection;
_bstr_t sqltext="select * from yourtable";
m_commandptr->CommandText =sqltext;
m_commandptr->CommandType =adCmdText;
m_pUserSet=m_commandptr->Execute (NULL,NULL,adCmdUnknown);
Top
11 楼coyer(test)回复于 2002-10-18 14:45:37 得分 1
ZHENG017(风中王子) ( ) 真是好人。
我没有补充的了。Top
12 楼coolc(石头里的魔)回复于 2002-10-18 16:02:46 得分 1
upTop
13 楼feifei2001(鼠标)回复于 2002-10-19 10:46:58 得分 0
但这段程序在最后返回的时候报 Runtime error !
不知道ZHENG017(风中王子)发现没??Top
14 楼ZHENG017()回复于 2002-10-21 10:26:30 得分 0
能把你的源程序发过我看看吗?
zheng017@163.comTop
15 楼ZHENG017()回复于 2002-10-21 14:01:17 得分 0
to feifei2001(动力A6) :
不知道怎么搞的今天163.com和163.net都收不到信...
你有给我发邮件吗哈?Top
16 楼feifei2001(鼠标)回复于 2002-10-21 16:43:11 得分 0
程序已发出,多谢,Top
17 楼ZHENG017()回复于 2002-10-21 17:05:44 得分 0
1.在stdafx.h中,换成#import "C:\Program Files\Common Files\System\ado\msado15.tlb" no_namespace rename("EOF","adoEOF")//取消掉那个编译警告信息
2.把char buf[100];换成_bstr_t buf("Driver={SQL Server};Server=dhl;Address=127.0.0.1,1433;Network=DBMSSOCN; Database=master;Uid=sa;Pwd=talent");
3.在try
{
if(SUCCEEDED(hr))
{
hr=m_pConnect->Open(buf,"","",adModeUnknown);
}}
catch( _com_error e)
{
//::CoUninitialize( );
AfxMessageBox( e.ErrorMessage());
return FALSE;
}Top
18 楼firmamenthy(执子之手)回复于 2002-11-04 12:29:55 得分 0
mkTop




