首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

小弟我在用VC做一个程序,需要ADO访问SQL数据库

2012-05-12 
我在用VC做一个程序,需要ADO访问SQL数据库按照教程做的,已经检查了好几遍。不知道问题出在哪里,求大神帮助

我在用VC做一个程序,需要ADO访问SQL数据库
按照教程做的,已经检查了好几遍。不知道问题出在哪里,求大神帮助
登录对话框连不上数据库,
以下是登录对话框的代码
void CLoginDlg::OnOK() 
{
//将对话框中编辑框的数据读取到成员变量中
UpdateData(TRUE);
//检查数据有效性
if (m_UserName == "")
{
MessageBox("请输入用户名");
return;
}
if (m_Pwd == "")
{
MessageBox("请输入密码");
return;
}
//定义CUsers对象,用于从表Users中读取数据
CUsers user;
user.GetData(m_UserName);
//如果读取的数据与用户输入数据不同,则返回
if (user.GetPwd()!= m_Pwd)
{
MessageBox("用户信息不正确,无法登录!");
return;
}
//关闭对话框
CDialog::OnOK();
}
以下是CUsers的定义(连接数据库的部分)
//数据库操作
int CUsers::HaveName(CString cUserName)
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SELECT语句
_bstr_t vSQL;
vSQL = "SELECT * FROM Users WHERE UserName='" + cUserName + "'";

//执行SELECT语句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet(vSQL);
if (m_pRecordset->adoEOF)
return -1;
else
return 1;

//断开与数据库的连接
m_AdoConn.ExitConnect();
}


void CUsers::sql_insert()
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置INSERT语句
CString strType;
strType.Format("%d", User_type);

_bstr_t vSQL;
vSQL = "INSERT INTO Users VALUES('" + UserName + "','" + Pwd + "'," 
+ strType + ")";
//执行INSERT语句
m_AdoConn.ExecuteSQL(vSQL);
//断开与数据库的连接
m_AdoConn.ExitConnect();
}

void CUsers::sql_updatePwd(CString cUserName)
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置UPDATE语句
CString strType;
strType.Format("%d", User_type);

_bstr_t vSQL;
vSQL = "UPDATE Users SET Pwd='" + Pwd + "' WHERE UserName='" + cUserName + "'";
//执行UPDATE语句
m_AdoConn.ExecuteSQL(vSQL);
//断开与数据库的连接
m_AdoConn.ExitConnect();
}

void CUsers::sql_delete(CString cUserName)
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置DELETE语句
_bstr_t vSQL;
vSQL = "DELETE FROM Users WHERE UserName='" + cUserName+ "'";
//执行DELETE语句
m_AdoConn.ExecuteSQL(vSQL);
//断开与数据库的连接
m_AdoConn.ExitConnect();
}

//根据员工编号读取所有字段值
void CUsers::GetData(CString cUserName)
{
//连接数据库
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SELECT语句
_bstr_t vSQL;
vSQL = "SELECT * FROM Users WHERE UserName='" + cUserName + "'";
//执行SELETE语句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet(vSQL);

//返回各列的值
if (m_pRecordset->adoEOF)
CUsers();
else
{
UserName = cUserName;
Pwd = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Pwd");
User_type = atoi((LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("User_type"));
}
//断开与数据库的连接
m_AdoConn.ExitConnect();
}
以下是ADOConn.cpp
// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "HrSys.h"
#include "ADOConn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}
// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境 


::CoInitialize(NULL);
  
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=SQLOLEDB; Server=ntserver;Database=HrSys; uid=sa; pwd=sa;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}

// 执行查询
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
// 返回记录集
return m_pRecordset;
}

 // 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
//_variant_t RecordsAffected;
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText, 
// VARIANT * RecordsAffected, long Options ) 
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数, 
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}

void ADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}

[解决办法]
数据库是否连接成功?

连接字符串这样写
_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=FALSE;Initial Catalog=HrSys;Data Source=.";

热点排行