VC2010上通过ADO访问数据库的几个小问题
VC2010下通过ADO访问数据库的几个问题
初步学习,但是遇见许多麻烦,请指教
1.想数据库写入一个新表
看见的代码是比较早以前的了 代码如下:
头文件定义:
_ConnectionPtr m_pConnection;
void CEX_DatabaseDlg::OnClickedNewtablebutton()
{
// TODO: Add your control notification handler code here
HRESULT hr;
//hr=m_pConnection.CreateInstance(__uuidof(Connection));
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
hr = m_pConnection->Open(_T("Provider =Microsoft.Jet.OLEDB.4.0;Data Source = 学生档案.mdb"),"","",adModeUnknown);
// m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=学生档案.mdb","","",adModeUnknown);
}
catch(_com_error *e)
{
CString errormessage;
errormessage.Format(_T("数据库连接失败:%s"),e->ErrorMessage());
AfxMessageBox(errormessage);
}
_variant_t RecordsAffected;
//_RecordsetPtr m_pRecordset;
//_CommandPtr m_pCommand;
m_pConnection->Execute("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)",&RecordsAffected,adCmdText);
//m_pCommand->Execute( NULL, NULL, adCmdText);
}
报错:Unhandled exception at 0x7c812afb in EX_Database.exe: Microsoft C++ exception: _com_error at memory location 0x0012f1ac.. 位置就是在open()函数和execute()两个函数 。
2. 本来是想用m_pRecordset1 = m_pCommand->Execute(("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)",&RecordsAffected,adCmdText) 并注释掉hr 来看看能不能解决,出现了char[]不能转为variant,这是个小问题,但是新手老是遇见类似的问题,通常加_T(),有时不能解决,请问有更方便的方法么?
------解决方案--------------------
先把*e改成e或者&e试一下吧
三种写法都见过,也不知道哪种是绝对对的
------解决方案--------------------
这个也容错一下,再看看错误提示
------解决方案--------------------
这个也容错一下,再看看错误提示
C/C++ code
try
{
_variant_t RecordsAffected;
//_RecordsetPtr m_pRecordset;
//_CommandPtr m_pCommand;
m_pConnection->Execute("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)……
------解决方案--------------------
把个人信息改成[个人信息]试试
初步学习,但是遇见许多麻烦,请指教
1.想数据库写入一个新表
看见的代码是比较早以前的了 代码如下:
头文件定义:
_ConnectionPtr m_pConnection;
void CEX_DatabaseDlg::OnClickedNewtablebutton()
{
// TODO: Add your control notification handler code here
HRESULT hr;
//hr=m_pConnection.CreateInstance(__uuidof(Connection));
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
hr = m_pConnection->Open(_T("Provider =Microsoft.Jet.OLEDB.4.0;Data Source = 学生档案.mdb"),"","",adModeUnknown);
// m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=学生档案.mdb","","",adModeUnknown);
}
catch(_com_error *e)
{
CString errormessage;
errormessage.Format(_T("数据库连接失败:%s"),e->ErrorMessage());
AfxMessageBox(errormessage);
}
_variant_t RecordsAffected;
//_RecordsetPtr m_pRecordset;
//_CommandPtr m_pCommand;
m_pConnection->Execute("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)",&RecordsAffected,adCmdText);
//m_pCommand->Execute( NULL, NULL, adCmdText);
}
报错:Unhandled exception at 0x7c812afb in EX_Database.exe: Microsoft C++ exception: _com_error at memory location 0x0012f1ac.. 位置就是在open()函数和execute()两个函数 。
2. 本来是想用m_pRecordset1 = m_pCommand->Execute(("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)",&RecordsAffected,adCmdText) 并注释掉hr 来看看能不能解决,出现了char[]不能转为variant,这是个小问题,但是新手老是遇见类似的问题,通常加_T(),有时不能解决,请问有更方便的方法么?
------解决方案--------------------
先把*e改成e或者&e试一下吧
三种写法都见过,也不知道哪种是绝对对的
------解决方案--------------------
这个也容错一下,再看看错误提示
try
{
_variant_t RecordsAffected;
//_RecordsetPtr m_pRecordset;
//_CommandPtr m_pCommand;
m_pConnection->Execute("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)",&RecordsAffected,adCmdText);
}
catch(_com_error& e)
{
MessageBox(e.Description(),"错误");
}
------解决方案--------------------
这个也容错一下,再看看错误提示
C/C++ code
try
{
_variant_t RecordsAffected;
//_RecordsetPtr m_pRecordset;
//_CommandPtr m_pCommand;
m_pConnection->Execute("CREATE TABLE 个人信息(学号 INTERGER,年龄 INTERGER)……
------解决方案--------------------
把个人信息改成[个人信息]试试