win32控制台程序连接sqlserver数据库的问题
兄弟我正在做的一个程序,后台服务器类型的,所以用不到界面,导师让做成win32控制台就行,但是连接数据库的时候出现很多问题,编译环境vs2005+winXP(sp2)
源代码如下
头文件:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#pragma comment(lib,"Ws2_32.lib")
#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
//头文件
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <string>
#include <time.h>
#include <stdlib.h>
#include <io.h>
//#include <winsock.h>
#include <winsock2.h>
using namespace std;
//常量
#define BUF_SIZE 1024
#define PORT 15000
//变量,多方共享的部分
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
static _ConnectionPtr m_pConnection;
static _RecordsetPtr m_pRecordset;
//函数
void bzero(void *s,int n);
// TODO: 在此处引用程序需要的其他头文件
部分主程序:
// winserver.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char readbuf[BUF_SIZE];
struct sockaddr_in serv_addr, client_addr;
SOCKET listen_fd = 0;
SOCKET ns = 0;
WSADATA wsaData;
int nlen,readlen;
int status,bindn;
////////////////////////////////////////////
//初始化com库文件
if ( SUCCEEDED( CoInitialize(NULL) ) )
{
HRESULT hr;
try
{
hr =m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
_bstr_t strConnOne = "Provider=SQLOLEDB; server=qld\\sqlserver; database=CarDouIP; uid=Administrator; pwd=111";
hr = m_pConnection->Open(strConnOne,"","",adModeUnknown);
// hr = m_pConnection->Open("driver={SQLServer};Server=QLD\\SQLSERVER;DATABASE=CarDouIP_Data;UID=Administrator;PWD=111;","","",adModeUnknown);///连接数据库
// hr = m_pConnection->Open("Data Source=QLD\\SQLSERVER;UID=Administrator;PWD=111","","",adModeUnknown);//连接数据库
printf("connect database success!\n");
}
}
catch(_com_error e)///捕捉异常
{
printf("connect database failed!\n");
MessageBox(NULL, L"connect database error", L"", FALSE);///显示错误信息
}
}
CoUninitialize();
////////////////////////////////////////////
问题:程序在编译过程中没有错误,但是调试的时候报错
winserver.exe 中的 0x7c812a5b 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012f6c0 处的 _com_error。
中断之后指向msado15.tli中的这个部分inline HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options ) {
HRESULT _hr = raw_Open(ConnectionString, UserID, Password, Options);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;
}中return_hr。但是原因没有找到,开始怀疑是数据库设置有问题,但是在vs2005的工具-〉连接数据库的向导中可以设置“服务器资源管理器”,在这里面可以看到数据库的信息和各种表,说明数据库可以正常连接。
但是通过代码不知道为啥就是连不上。。。请各位高手指点~谢谢!