::CoInitialize(NULL)
连接数据库
[cpp] view plaincopyprint?
BOOL CLogin::ConnectDB(void)
{
HRESULT hr = NULL
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection")///创建 Connection 对象
if(SUCCEEDED(hr))
{
//登录数据库并连接数据库DBCourse
//这里的server不能写成127.0.0.1否则会出现未指定的错误,应该写成Sql server登录界面的服务器名称
m_pConnection->ConnectionString = "driver={SQL Server}server=LOGO-PC\\LOGOuid=DBCoursepwd=DBCourse"
m_pConnection->Open("","","",adConnectUnspecified)
m_pConnection->DefaultDatabase = "DBCourse"
}
else
{
AfxMessageBox(TEXT("创建 Connection 对象失败"))///显示错误信息
return FALSE
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage
errormessage.Format( TEXT("连接数据库失败 !\r\n 错误信息 :%s(%ld)"),e.ErrorMessage(),e.Error() )
AfxMessageBox(errormessage)///显示错误信息
return FALSE
}
return TRUE
}
*** 作数据库
[cpp] view plaincopyprint?
void CLogin::OnBnClickedButton1()
{
if( m_user.GetWindowTextLength()<=0 || m_password.GetWindowTextLength()<=0 )
{
MessageBox(TEXT("请输入用户名或密码!"), TEXT("错误:用户名或密码为空"), MB_OK | MB_ICONWARNING )
return
}
if( FALSE==this->ConnectDB() ) return
TCHAR szUserName[20]
TCHAR szPassword[50]
TCHAR szSql[MAX_PATH]
//获取用户输入的用户名和密码
m_user.GetWindowText( szUserName, 20 )
m_password.GetWindowText( szPassword, 50 )
//创建_RecordsetPtr用来执行数据库 *** 作
_RecordsetPtr pRecordset
pRecordset.CreateInstance("ADODB.Recordset")
_tcscpy_s( szSql, TEXT("select * from usr where uname='") )
_tcscat_s( szSql, szUserName )
_tcscat_s( szSql, TEXT("' and passwd='") )
_tcscat_s( szSql, szPassword )
_tcscat_s( szSql, TEXT("'") )
pRecordset->Open(_variant_t(szSql), _variant_t ((IDispatch*) m_pConnection,true), adOpenStatic, adLockOptimistic, adCmdText)
int nResult = DLG_RESULT_OK
if( pRecordset->RecordCount>0 )
{
//MessageBox(TEXT("登录成功!"), szUserName, MB_OK | MB_ICONINFORMATION )
}
else
{
MessageBox(TEXT("用户名或密码错误!"), TEXT("登录失败!"), MB_OK | MB_ICONINFORMATION )
nResult = DLG_RESULT_ERROR
}
pRecordset->Close()
if( DLG_RESULT_OK==nResult ) Exit( DLG_RESULT_OK )
}
哦忘了一件事了,还需要在stafx.h文件中引入dll文件的,如此
[cpp] view plaincopyprint?
//添加dll库
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
//添加dll库
//添加宏定义
#define DLG_RESULT_OK 1
#define DLG_RESULT_ERROR 2
#define DLG_RESULT_CANCEL 3
//添加宏定义
Query query = this.getSession().createQuery("SELECT new list(tf.id) FROM TFood tf WHERE id=?")query.setParameter(1, 1L)// List list=query.list()再判断 list数据库连接失败的原因及解决方法原因一:登录账号、密码、服务器名称、数据库名称登录错误导致不能连接,这个比较常见,仔细检查好所填信息是否正确,填写正确一般就可以解决。
解决方法:当正在使用的软件出现数据库不能连接时,一般就是服务器名出现问题,更改服务器名称一般可以解决问题。数据库如果是安装在本机,服务器名可以用“.”或“(local)”来代替 ;如果是安装在局域网的其它计算机上,可以用IP地址作为服务器名。
原因二:如果没能正确安装SQL服务器,也会导致数据库连接不上;安装好数据库后,如果SQL服务管理器没有启动,则要去服务那里开启。
解决方法:如果是SQL数据库未能能成功安装,再次重新安装时,可能会无法安装,提示是存在一个未完成的安装挂起。解决就方法是:打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager中找到并删除PendingFileRenameOperations项目即可。
如果是更改了Windows的用户名或者密码,会导致SQL服务管理器不能启动,解决办法是去控制版面的服务那里修改启动。具体是:点击开始-->设置-->控制面板-->管理工具-->服务-->找到MS SQL SERVER服务-->在上面右键-->属性-->登陆-->修改启动服务的帐户和密码。
原因三:因权限问题导致数据库不能连接,解决方法是检测计算机的安全保护限制、SQL Server安全设置、 *** 作系统的安全限。
解决方法:可以先暂时关闭防火墙或者杀毒软件,看是否是这些软件的安全设置所导致。
SQL Server安全设置:打开企业管理器-->展开SQ L Server组-->右击服务器名-->点击属性-->在SQL Server属性-->安全性中,把“身份验证”选择为“在SQL Server和Windows”;
如果SQL服务器采用的是Windows XP系统,当工作站电脑出现不能连接数据库的情况时,可以在服务器和工作站各建立一个相同的WINDOWS用户账号和密码
原因四:引起原因:网络连接存在故障
解决方法:检修网络是否存在故障。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)