先是提示:
错误 1 fatal error C1189: #error : Security Issue: The connection string may contain a password e:\softexercise\20080902\ktest035\ktest035\news.h 58 我就把
#error : Security Issue: The connection string may contain a password
给注释掉了,然后再进行编译运行,结果弹出警告:
或者谁能告诉我用VC 2005的时候怎样弄一个最简单的OLEDB ALT,连接ACCESS数据库?======================================== // news.h : Cnews 的声明 #pragma once // 代码生成在 2008年9月2日, 8:53 class CnewsAccessor
{
public:
LONG m_ID;
LONG m_newsSort;
TCHAR m_Title[201];
TCHAR m_titlePic[201];
DBTIMESTAMP m_newsDate;
// ISequentialStream* m_Content;
TCHAR m_Content[8000]; // 以下向导生成的数据成员包含
//列映射中相应字段的状态值。
// 可以使用这些值保存数据库返回的 NULL 值或在编译器返回
// 错误时保存错误信息。有关如何使用
//这些字段的详细信息,
// 请参见 Visual C++ 文档中的
//“向导生成的访问器中的字段状态数据成员”。
// 注意: 在设置/插入数据前必须初始化这些字段! DBSTATUS m_dwIDStatus;
DBSTATUS m_dwnewsSortStatus;
DBSTATUS m_dwTitleStatus;
DBSTATUS m_dwtitlePicStatus;
DBSTATUS m_dwnewsDateStatus;
DBSTATUS m_dwContentStatus; // 以下向导生成的数据成员包含
//列映射中相应字段的长度值。
// 注意: 对变长列,必须在设置/插入
// 数据前初始化这些字段! DBLENGTH m_dwIDLength;
DBLENGTH m_dwnewsSortLength;
DBLENGTH m_dwTitleLength;
DBLENGTH m_dwtitlePicLength;
DBLENGTH m_dwnewsDateLength;
DBLENGTH m_dwContentLength;
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
// pPropSet->AddProperty(DBPROP_ISequentialStream, true);
} HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
#error Security Issue: The connection string may contain a password
// 此连接字符串中可能包含明文密码和/或其他重要
// 信息。请在查看完此连接字符串并找到所有与安全
// 有关的问题后移除 #error。可能需要将此密码存
// 储为其他格式或使用其他的用户身份验证。
hr = _db.OpenFromInitializationString(L"Provider=MSDASQL.1;Persist Security Info=False;Data Source=su;Extended Properties=\"DSN=su;DBQ=E:\\SoftExercise\\20080830\\su.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\"");
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db);
} void CloseDataSource()
{
m_session.Close();
} operator const CSession&()
{
return m_session;
} CSession m_session; DEFINE_COMMAND_EX(CnewsAccessor, L" \
SELECT \
ID, \
newsSort, \
Title, \
titlePic, \
newsDate, \
Content \
FROM news") // 该表/命令包含可以通过 ISequentialStream 接口
// 访问的列。然而,并非所有提供程序都支持此功能,
// 即使那些确实支持此功能的提供程序通常也仅限为
// 每个行集只有一个 ISequentialStream。
// 如果希望在此访问器中使用流,请使用以下代码的
// 示例行,并将 DBPROP_ISequentialStream 行集属
// 性设置为 True。然后就可以使用 Read() 方法读
// 取数据或使用 Write()方法写入数据(注意此操作
// 要求将 STGM_READ 流属性更改为 STGM_WRITE 或
// STGM_READWRITE)。有关 ISequentialStream 绑定
// 的详细信息,请参见文档 // 为解决某些提供程序的若干问题,以下代码可能以
// 不同于提供程序所报告的顺序来绑定列 BEGIN_COLUMN_MAP(CnewsAccessor)
COLUMN_ENTRY_LENGTH_STATUS(1, m_ID, m_dwIDLength, m_dwIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(2, m_newsSort, m_dwnewsSortLength, m_dwnewsSortStatus)
COLUMN_ENTRY_LENGTH_STATUS(3, m_Title, m_dwTitleLength, m_dwTitleStatus)
COLUMN_ENTRY_LENGTH_STATUS(4, m_titlePic, m_dwtitlePicLength, m_dwtitlePicStatus)
COLUMN_ENTRY_LENGTH_STATUS(5, m_newsDate, m_dwnewsDateLength, m_dwnewsDateStatus)
// BLOB_ENTRY_LENGTH_STATUS(6, IID_ISequentialStream, STGM_READ, m_Content, m_dwContentLength, m_dwContentStatus)
COLUMN_ENTRY_LENGTH_STATUS(6, m_Content, m_dwContentLength, m_dwContentStatus)
END_COLUMN_MAP()
}; class Cnews : public CCommand <CAccessor <CnewsAccessor> >
{
public:
HRESULT OpenAll()
{
HRESULT hr;
hr = OpenDataSource();
if (FAILED(hr))
return hr;
__if_exists(GetRowsetProperties)
{
CDBPropSet propset(DBPROPSET_ROWSET);
__if_exists(HasBook)
{
if( HasBook() )
propset.AddProperty(DBPROP_IRowsetLocate, true);
}
GetRowsetProperties(&propset);
return OpenRowset(&propset);
}
__if_not_exists(GetRowsetProperties)
{
__if_exists(HasBook)
{
if( HasBook() )
{
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
return OpenRowset(&propset);
}
}
}
return OpenRowset();
} HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
HRESULT hr = Open(m_session, NULL, pPropSet);
#ifdef _DEBUG
if(FAILED(hr))
AtlTraceErrorRecords(hr);
#endif
return hr;
} void CloseAll()
{
Close();
ReleaseCommand();
CloseDataSource();
}
};
错误 1 fatal error C1189: #error : Security Issue: The connection string may contain a password e:\softexercise\20080902\ktest035\ktest035\news.h 58 我就把
#error : Security Issue: The connection string may contain a password
给注释掉了,然后再进行编译运行,结果弹出警告:
或者谁能告诉我用VC 2005的时候怎样弄一个最简单的OLEDB ALT,连接ACCESS数据库?======================================== // news.h : Cnews 的声明 #pragma once // 代码生成在 2008年9月2日, 8:53 class CnewsAccessor
{
public:
LONG m_ID;
LONG m_newsSort;
TCHAR m_Title[201];
TCHAR m_titlePic[201];
DBTIMESTAMP m_newsDate;
// ISequentialStream* m_Content;
TCHAR m_Content[8000]; // 以下向导生成的数据成员包含
//列映射中相应字段的状态值。
// 可以使用这些值保存数据库返回的 NULL 值或在编译器返回
// 错误时保存错误信息。有关如何使用
//这些字段的详细信息,
// 请参见 Visual C++ 文档中的
//“向导生成的访问器中的字段状态数据成员”。
// 注意: 在设置/插入数据前必须初始化这些字段! DBSTATUS m_dwIDStatus;
DBSTATUS m_dwnewsSortStatus;
DBSTATUS m_dwTitleStatus;
DBSTATUS m_dwtitlePicStatus;
DBSTATUS m_dwnewsDateStatus;
DBSTATUS m_dwContentStatus; // 以下向导生成的数据成员包含
//列映射中相应字段的长度值。
// 注意: 对变长列,必须在设置/插入
// 数据前初始化这些字段! DBLENGTH m_dwIDLength;
DBLENGTH m_dwnewsSortLength;
DBLENGTH m_dwTitleLength;
DBLENGTH m_dwtitlePicLength;
DBLENGTH m_dwnewsDateLength;
DBLENGTH m_dwContentLength;
void GetRowsetProperties(CDBPropSet* pPropSet)
{
pPropSet->AddProperty(DBPROP_CANFETCHBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
pPropSet->AddProperty(DBPROP_CANSCROLLBACKWARDS, true, DBPROPOPTIONS_OPTIONAL);
// pPropSet->AddProperty(DBPROP_ISequentialStream, true);
} HRESULT OpenDataSource()
{
CDataSource _db;
HRESULT hr;
#error Security Issue: The connection string may contain a password
// 此连接字符串中可能包含明文密码和/或其他重要
// 信息。请在查看完此连接字符串并找到所有与安全
// 有关的问题后移除 #error。可能需要将此密码存
// 储为其他格式或使用其他的用户身份验证。
hr = _db.OpenFromInitializationString(L"Provider=MSDASQL.1;Persist Security Info=False;Data Source=su;Extended Properties=\"DSN=su;DBQ=E:\\SoftExercise\\20080830\\su.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\"");
if (FAILED(hr))
{
#ifdef _DEBUG
AtlTraceErrorRecords(hr);
#endif
return hr;
}
return m_session.Open(_db);
} void CloseDataSource()
{
m_session.Close();
} operator const CSession&()
{
return m_session;
} CSession m_session; DEFINE_COMMAND_EX(CnewsAccessor, L" \
SELECT \
ID, \
newsSort, \
Title, \
titlePic, \
newsDate, \
Content \
FROM news") // 该表/命令包含可以通过 ISequentialStream 接口
// 访问的列。然而,并非所有提供程序都支持此功能,
// 即使那些确实支持此功能的提供程序通常也仅限为
// 每个行集只有一个 ISequentialStream。
// 如果希望在此访问器中使用流,请使用以下代码的
// 示例行,并将 DBPROP_ISequentialStream 行集属
// 性设置为 True。然后就可以使用 Read() 方法读
// 取数据或使用 Write()方法写入数据(注意此操作
// 要求将 STGM_READ 流属性更改为 STGM_WRITE 或
// STGM_READWRITE)。有关 ISequentialStream 绑定
// 的详细信息,请参见文档 // 为解决某些提供程序的若干问题,以下代码可能以
// 不同于提供程序所报告的顺序来绑定列 BEGIN_COLUMN_MAP(CnewsAccessor)
COLUMN_ENTRY_LENGTH_STATUS(1, m_ID, m_dwIDLength, m_dwIDStatus)
COLUMN_ENTRY_LENGTH_STATUS(2, m_newsSort, m_dwnewsSortLength, m_dwnewsSortStatus)
COLUMN_ENTRY_LENGTH_STATUS(3, m_Title, m_dwTitleLength, m_dwTitleStatus)
COLUMN_ENTRY_LENGTH_STATUS(4, m_titlePic, m_dwtitlePicLength, m_dwtitlePicStatus)
COLUMN_ENTRY_LENGTH_STATUS(5, m_newsDate, m_dwnewsDateLength, m_dwnewsDateStatus)
// BLOB_ENTRY_LENGTH_STATUS(6, IID_ISequentialStream, STGM_READ, m_Content, m_dwContentLength, m_dwContentStatus)
COLUMN_ENTRY_LENGTH_STATUS(6, m_Content, m_dwContentLength, m_dwContentStatus)
END_COLUMN_MAP()
}; class Cnews : public CCommand <CAccessor <CnewsAccessor> >
{
public:
HRESULT OpenAll()
{
HRESULT hr;
hr = OpenDataSource();
if (FAILED(hr))
return hr;
__if_exists(GetRowsetProperties)
{
CDBPropSet propset(DBPROPSET_ROWSET);
__if_exists(HasBook)
{
if( HasBook() )
propset.AddProperty(DBPROP_IRowsetLocate, true);
}
GetRowsetProperties(&propset);
return OpenRowset(&propset);
}
__if_not_exists(GetRowsetProperties)
{
__if_exists(HasBook)
{
if( HasBook() )
{
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_IRowsetLocate, true);
return OpenRowset(&propset);
}
}
}
return OpenRowset();
} HRESULT OpenRowset(DBPROPSET *pPropSet = NULL)
{
HRESULT hr = Open(m_session, NULL, pPropSet);
#ifdef _DEBUG
if(FAILED(hr))
AtlTraceErrorRecords(hr);
#endif
return hr;
} void CloseAll()
{
Close();
ReleaseCommand();
CloseDataSource();
}
};
hr = OpenDataSource();
if (FAILED(hr))
return hr; hr = _db.OpenFromInitializationString(L"Provider=MSDASQL.1;Persist Security Info=False;Data Source=su;Extended Properties=\"DSN=su;DBQ=E:\\SoftExercise\\20080830\\su.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;\"");
不知为何会出现问题。
还不行的话,就把OLE DB for ODBC换成OLE DB Jet .然后选择数据库表,屏蔽这句话就可以运行正常了。