连接代码如下:
void CMy123Dlg::InitSqlServer(CString server, CString db, CString UserName, CString Pwd)
{ AfxOleInit();
m_pConnection.CreateInstance("ADODB.Connection"); CString strCn; strCn.Empty();
strCn="provider=SQLOLEDB;data source="+server +";initial catalog="+db +";userID="+UserName +";PassWord="+Pwd; _variant_t bcnstr=_variant_t(strCn); _variant_t bunstr=_variant_t(UserName); _variant_t bpwdstr=_variant_t(Pwd); //打开一个连接 try {
m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr), _bstr_t(bpwdstr),-1);//adOpenUnspecified } catch(_com_error e) { CString errormessage; errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__); AfxMessageBox(errormessage); } catch(...) { AfxMessageBox("Warning :连接数据库时发生未知错误"); } }错误是:Warning: 连接数据库发生异常. 错误信息: 未指定的错误。
请各位大侠指教
void CMy123Dlg::InitSqlServer(CString server, CString db, CString UserName, CString Pwd)
{ AfxOleInit();
m_pConnection.CreateInstance("ADODB.Connection"); CString strCn; strCn.Empty();
strCn="provider=SQLOLEDB;data source="+server +";initial catalog="+db +";userID="+UserName +";PassWord="+Pwd; _variant_t bcnstr=_variant_t(strCn); _variant_t bunstr=_variant_t(UserName); _variant_t bpwdstr=_variant_t(Pwd); //打开一个连接 try {
m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr), _bstr_t(bpwdstr),-1);//adOpenUnspecified } catch(_com_error e) { CString errormessage; errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__); AfxMessageBox(errormessage); } catch(...) { AfxMessageBox("Warning :连接数据库时发生未知错误"); } }错误是:Warning: 连接数据库发生异常. 错误信息: 未指定的错误。
请各位大侠指教
另外,记得在实例中 初始化Com库(构造函数中),在你这个函数中初始化不行的
我是个菜鸟不懂怎么重装这些东西
Com已经初始化了还用请问下:
strCn="provider=SQLOLEDB;data source="+server +";initial catalog="+db +";userID="+UserName +";PassWord="+Pwd;
这里的server 是什么啊,我填的是“127.0.0.1” 可以吧?
strCn.Format("Provider=SQLOLEDB.1;Data Source=%s;Initial Catalog=%s;User ID=%s;PWD=%s", server, db, UserName, Pwd);m_pConnection->Open(_bstr_t(strCn), "", "",adModeUnknown);如果你的数据库端口是1433的话,这样肯定没有问题。
{
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。
CString strConn;
try
{
switch(dtType)
{
case MSACCESS:
strConn = _T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=") + dbSrc;
if (sPassword != _T(""))
{
strConn += _T(";Jet OLEDB:Database Password=") + sPassword + _T(";");
}
break;
case ORACLE:
strConn = _T("Provider=MSDAORA;Data Source=") + sServer + _T(";User ID=") + sUser
+ _T("; Password=") + sPassword;
break;
case MSSQL2000:
case MSSQL2005:
case MSSQL2008:
if(!isLocalConnect)
{
strConn = _T("Provider=SQLOLEDB.1; Data Source=") + sServer +
_T("; Initial Catalog=") + dbSrc +
_T("; User ID=") + sUser +
_T("; PWD=") + sPassword;
}
else
{
strConn = _T("Provider=SQLOLEDB.1; Data Source=") + sServer +
_T("; Initial Catalog=") + dbSrc +
_T("; Integrated Security=True");
}
break;
default:
return FALSE;
break;
}//枚举数据库中的表,保存到CStringArray数组中——m_arTables
if(m_pConnection->Open((_bstr_t)strConn,"","",adModeUnknown) == S_OK)
{_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
IADORecordBinding *picRs = NULL;
m_pRecordset.QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs);
m_pRecordset = m_pConnection->OpenSchema(adSchemaTables);//枚举表的名称处理
while(!(m_pRecordset->adoEOF))
{
CString strTableType;
_bstr_t table_name = m_pRecordset->Fields->GetItem(_T("TABLE_NAME"))->Value;//获取表的名称
_bstr_t table_type = m_pRecordset->Fields->GetItem(_T("TABLE_TYPE"))->Value;//获取表的类型
strTableType.Format(_T("%s"),(LPCSTR) table_type);
if(!lstrcmp(strTableType,_T("TABLE")))
{
#ifndef UNICODE
m_arTables.Add((LPCSTR) table_name);//添加表的名称
#else
m_arTables.Add((LPCTSTR)table_name);
#endif
}
m_pRecordset->MoveNext();
}return TRUE;
}
}
catch(_com_error e)
{
char chs[1024]={0};
sprintf(chs,"Warning: CLeesConnection::OpenConnection 方法发生异常. 错误信息: %s; 文件: %s; 行: %d\n%s\n", e.ErrorMessage(), __FILE__, __LINE__,strConn);
theService->LogEvent(EVENTLOG_ERROR_TYPE,989,chs);
TRACE(_T("Warning: OpenConnection 方法发生异常. 错误信息: %s; 文件: %s; 行: %d\n"), e.ErrorMessage(), __FILE__, __LINE__);
}
return FALSE;
}