(L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=FamilyHistory;Data Source=kampu;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KAMPU; \ Use Encryption for Data=False;Tag with column collation when possible=False")我用了这样的字符串,成功,是用向导生成的,内容太多了,不知道哪里有介绍数据库连接的,这里哪些可以忽略,好象很多连接字符串的参数很少的,如果手动是不是太麻烦了
{
public:
_ConnectionPtr m_pConnectionPtr;//connection to database
_bstr_t strConnection;
_bstr_t Provider;
_bstr_t Server;
_bstr_t Database;
_bstr_t uid;
_bstr_t pwd;
// operate the recordset
_RecordsetPtr m_pRecordsetPtr; public:
MyDatabase(void);
public:
~MyDatabase(void);
public:
bool DatabaseConnection();
bool InitConnectionStr(_bstr_t,_bstr_t,_bstr_t,_bstr_t,_bstr_t);
}*lpMyDatabase;
是MyDatabase.cpp
#include "StdAfx.h"
#include "MyDatabase.h"MyDatabase::MyDatabase(void)
{
Provider="";
Server="";
Database="";
uid="";
pwd="";
strConnection="";
m_pConnectionPtr=NULL;
m_pRecordsetPtr=NULL;
}MyDatabase::~MyDatabase(void)
{
}
bool MyDatabase::DatabaseConnection()
{
HRESULT hr=m_pConnectionPtr.CreateInstance(__uuidof(Connection));
if(FAILED(hr))
{
AfxMessageBox(_T("Create Instance Failure!"));
return false;
}
try
{
hr=m_pConnectionPtr->Open(strConnection,uid,pwd,adModeUnknown);
if(SUCCEEDED(hr))
{
AfxMessageBox(_T("Open success"));
return true;
}
else
{
AfxMessageBox(_T("Failure!"));
return false;
}
}
catch(_com_error &e)
{
e.ErrorMessage();
return false;
}
}
bool MyDatabase::InitConnectionStr(_bstr_t temProvider,_bstr_t temServer,_bstr_t \
temDatabase,_bstr_t temuid,_bstr_t tempwd)
{
Provider="Provider="+temProvider;
Server="Server="+temServer;
Database="Database="+temDatabase;
uid="uid="+temuid;
pwd="pwd="+tempwd;
strConnection=Provider+";"+Server+";"+Database+";";
return true;
}
#include "MyDatabase.h"
并定义了一个MyDatabase m_MyDatabase;
然后在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数里调用bool OK=m_MyDatabase.InitConnectionStr("SQLOLEDB","kampu","FamilyHistory","kampu","");
if(OK)
{
OK=m_MyDatabase.DatabaseConnection();
if(OK)
{
AfxMessageBox(_T("连接成功!"));
}
else AfxMessageBox(_T("连接失败!"));
}
else AfxMessageBox(_T("Connection String Failure!"));连接老是失败(前提已经做过AfxOleInit())
有没有高人一起帮忙解决
但是我用manager studiou用该用户登陆仍然不行,我把我的帐户说明一下:
在我的SQL SERVER里有两个帐户,一个采用WINDOWS验证登陆的(就是上面的kampu),能够用MANAGER STUDIO登陆,另外一个采用的是采用SQL SERVER验证,但是不能用MANAGER STUDIO登陆
Use Encryption for Data=False;Tag with column collation when possible=False")我用了这样的字符串,成功,是用向导生成的,内容太多了,不知道哪里有介绍数据库连接的,这里哪些可以忽略,好象很多连接字符串的参数很少的,如果手动是不是太麻烦了
manger studio连接到你的实例, 打开"对象资源管理器"(按F8), 右键实例--属性--安全性--服务器身份验证--选择"sql server和windows"--确定然后再重新启动sql服务即可.
我还有两个问题用VC2005时:
1、很快内存就跑到1G多。不知道怎么回事。我用new申请的资源都有释放的。
2、还碰到一个奇怪的问题:当工程运行的时候,如果我连接数据库就不会有错误产生,如果不连数据库,就会跳出错误,不知道这是怎么回事?!
(如果上面两大问题解决,明天就可以结帖了)非常感谢zjcxc(邹建) 帮忙