4,018
社区成员




CString strDrive="";
int r= LoadKey("ODBC\\ODBCINST.INI\\SQL SERVER", "Driver", strDrive); // 关于LoadKey: 注册表读取
if(0==r ||strDrive=="")
{
MessageBox("系统未安装SQL server 驱动程序,无法创建数据源");
return FALSE;
}
CString strKey="ODBC\\ODBC.INI\\";
strKey+=m_ODBC_Name; // m_ODBC_Name == "tst"
// 关于SaveKey: 注册表写入
SaveKey(strKey,"Database",m_ODBC_Database); // m_ODBC_Database == "tst"
SaveKey(strKey,"Driver",strDrive);
SaveKey(strKey,"LastUser",m_ODBC_UserName); // m_ODBC_UserName == "sa"
SaveKey(strKey,"Server",m_ODBC_Server); // m_ODBC_Server == "127.0.0.1"
strKey="ODBC\\ODBC.INI\\ODBC Data Sources";
SaveKey(strKey,m_ODBC_Name,"SQL Server");
// 各个返回值都是枚举常量,自定义的。
HRESULT hResult; // 保存函数返回值
strConn = "Provider=sqloledb;Data source=tst;Initial Catalog =master";
try
{
hResult = m_pConnection.CreateInstance( __uuidof(Connection) ); // 建立一个实例
if ( FAILED(hResult) )
{
return INIT_ERROR_CREATE_INSTANCE; // 返回创建失败
}
// 打开一个连接
hResult = m_pConnection->Open( (_bstr_t)strConn, (_bstr_t)m_strUserID, (_bstr_t)m_strPassword, adModeUnknown ); // 用户名与上一段相同,密码为空,异常由此抛出
if ( FAILED(hResult) )
{
return INIT_ERROR_OPEN_DATASOURCE; // 返回打开数据源失败
}
}
// 异常处理
catch( _com_error &e )
{
long lErrorCode = e.WCode();
if ( 3149 == lErrorCode )
{
return INIT_ERROR_BAD_LOGIN;
}
::AfxMessageBox( (LPCTSTR)e.Description(), MB_ICONERROR ); // 每次走这里
return INIT_ERROR_EXCEPTION;
}
catch( ... )
{
TRACE( _T("Unknown Error") );
return INIT_ERROR_EXCEPTION;
}
return CONNECTION_SUCCESS;
// 格式化SQL命令
strSQLCommand.Format(
_T("isql -S localhost -U %s -P %s -d master -i %s\\serverini\\Create_tst%d.sql"),
m_strUserID, m_strPassword, strCurrentDir, i
); // 这里的ID和密码怎么处理? 我试过把它们kill掉,可惜,到了批处理时会提示Password:停住。