win32控制台程序连接sqlserver数据库的问题

qld001 2007-08-14 09:36:59
兄弟我正在做的一个程序,后台服务器类型的,所以用不到界面,导师让做成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的工具-〉连接数据库的向导中可以设置“服务器资源管理器”,在这里面可以看到数据库的信息和各种表,说明数据库可以正常连接。
但是通过代码不知道为啥就是连不上。。。请各位高手指点~谢谢!
...全文
1185 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
guxingfeiyu 2007-08-20
  • 打赏
  • 举报
回复
Provider=SQLOLEDB; server=qld\\sqlserver; database=CarDouIP; Trusted_Connection = yes;
qld001 2007-08-20
  • 打赏
  • 举报
回复
结帖子!送分!
qld001 2007-08-17
  • 打赏
  • 举报
回复
嗯,先不管行不行,谢谢大家的回复,我去试试看!~
冷月清晖 2007-08-16
  • 打赏
  • 举报
回复
用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登录帐户:BUILTIN\Administrators 以及 <机器名>\Administrator 被删除。要恢复这两个帐户,可以使用以下的方法:

  1、打开企业管理器,展开服务器组,然后展开服务器;

  2、展开"安全性",右击"登录",然后单击"新建登录";

  3、在"名称"框中,输入 BUILTIN\Administrators;

  4、在"服务器角色"选项卡中,选择"System Administrators" ;

  5、点击"确定"退出;

  6、使用同样方法添加 <机器名>\Administrator 登录。
google的 ,不知道是不是问题答案呢
冷月清晖 2007-08-16
  • 打赏
  • 举报
回复
首先 sa的权限要大于administrator的权限.
冷月清晖 2007-08-16
  • 打赏
  • 举报
回复
我以前搞 sql server也碰到过这个问题,当时也没深入,我来看看。
shenzhiwanghz 2007-08-16
  • 打赏
  • 举报
回复
当前登陆用户是Administrator吗 会不会是权限的原因
qld001 2007-08-16
  • 打赏
  • 举报
回复
没人知道为啥使用windows的系统用户名和密码就不好使阿??
再等2天,没人回就结帖子
qld001 2007-08-15
  • 打赏
  • 举报
回复

vb那个和win32差距蛮大的,不一样哦
星羽 2007-08-15
  • 打赏
  • 举报
回复
http://www.enet.com.cn/article/2004/0514/A20040514309013_5.shtml

看看这个vb的
qld001 2007-08-15
  • 打赏
  • 举报
回复
有谁知道为啥使用windows的系统用户名和密码就不好使呢?虽然用sa好使,可我想知道为啥windows不好使。。。50分阿~~
qld001 2007-08-14
  • 打赏
  • 举报
回复
哎,用sa好使,可是为啥用windows的就不行呢。。。。
qld001 2007-08-14
  • 打赏
  • 举报
回复
我设置的sqlserver属性-〉安全性-〉安全性-〉sqlserver和windows,按理说用系统用户名和密码也应该可以阿
guxingfeiyu 2007-08-14
  • 打赏
  • 举报
回复
OK,那就是你的数据库用户名密码不正确了.数据库支持sa吗?用sa吧,实在不行就新建一个用户.
qld001 2007-08-14
  • 打赏
  • 举报
回复
修改了一下MessageBox(NULL,e.ErrorMessage(),e.Description(),MB_OK);
上边框显示:用户‘Administrator’登陆失败
信息显示:IDispatch error #3149
qld001 2007-08-14
  • 打赏
  • 举报
回复
编译的时候没有错误,按F5调试程序报错:
winserver.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f6c0 处的 _com_error。
下面是调试信息:
“winserver.exe”: 已加载“D:\myprojects\winserver\debug\winserver.exe”,已加载符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\ntdll.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\kernel32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\ole32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\advapi32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\rpcrt4.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\gdi32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\user32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\msvcrt.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\oleaut32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\ws2_32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\ws2help.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcr80d.dll”,已加载符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\imm32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\lpk.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\usp10.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\uxtheme.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\MSCTF.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\clbcatq.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\comres.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\version.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\ado\msado15.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\msdart.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\comctl32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\comdlg32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\shlwapi.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\shell32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\xpsp2res.dll”,未使用调试信息生成二进制文件。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\Ole DB\oledb32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\Ole DB\oledb32r.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\Ole DB\sqloledb.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\Ole DB\msdatl3.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\netapi32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\secur32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\mswstr10.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\mswdat10.dll”,未加载任何符号。
“winserver.exe”: 已卸载“C:\WINDOWS\system32\mswdat10.dll”
“winserver.exe”: 已加载“C:\WINDOWS\system32\comsvcs.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\colbact.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\mtxclu.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\wsock32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\clusapi.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\resutils.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\userenv.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\dbnetlib.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\security.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\msv1_0.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\iphlpapi.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\ntdsapi.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\dnsapi.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\wldap32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\crypt32.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\msasn1.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\WINDOWS\system32\dbmslpcn.dll”,未加载任何符号。
“winserver.exe”: 已加载“C:\Program Files\Common Files\System\Ole DB\sqloledb.rll”,未使用调试信息生成二进制文件。
winserver.exe 中的 0x7c812a5b 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012f6c0 处的 _com_error。
winserver.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012f6c0 处的 _com_error。
程序“[1888] winserver.exe: 本机”已退出,返回值为 0 (0x0)。
guxingfeiyu 2007-08-14
  • 打赏
  • 举报
回复
static _ConnectionPtr m_pConnection;
static _RecordsetPtr m_pRecordset;
具体定义呢?没看见具体定义在哪里啊?!在WinServer.cpp的_tmain前加上这个试试看:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
cangwu_lee 2007-08-14
  • 打赏
  • 举报
回复
将错误的实际信息显示出来.

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧