mfc连接数据库失败

时间:2021-01-07 06:21:00
void CAddDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CoInitialize(NULL);//初始化COM库
_ConnectionPtr pConn(_uuidof(Connection));//利用智能指针定义了一个ADO Connection对象,
//利用关键字_uuidof获取ADO Connection接口的全局唯一标识符(GUID),对pConn对象初始化
_RecordsetPtr pRst(_uuidof(Recordset));//利用智能指针定义了一个ADO Recordset对象
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=XP-201308221218";//为数据口连接对象的连接字符串赋值
pConn->Open("","","",adConnectUnspecified);//这里可以直接为这些参数传递一个空字符串,因为它们已经在连接字符串中设置好了
//pRst=pConn->Execute("select * from 菜单",NULL,adCmdText);
//pRst->AddNew(_variant_t(m_addname),m_addprice);
//pRst->m_strName=m_addname;
//pRst->AddNew("菜名",_variant_t(m_addname));
//pRst->AddNew("单价",m_addprice);

//pRst->AddNew();
//pRst->PutCollect("菜单",_variant_t(m_addname));
//pRst->Update();

_variant_t RecordsAffected;
pRst=pConn->Execute("INSERT INTO 菜单 (菜名,单价) VALUES ((_variant_t)m_addname,(_variant_t)m_addprice)",&RecordsAffected,adCmdText);
pRst->Close();//关闭记录集
pConn->Close();//关闭连接
pRst.Release();//释放智能指针在COM接口上的引用计数
pConn.Release();
CoUninitialize();//卸载COM库



错误为:estaurant.exe 中的 0x7c812fd3 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0012ebbc 处的 _com_error。

13 个解决方案

#1


是SQL SERVER 200X?

#2


先单步调试下到哪一步出错,然后说下哪里。可参考这些代码http://blog.csdn.net/bojie5744/article/details/30067969

#3


是SQL SERVER 2000

#4


引用 楼主 chengdongyuan 的回复:
void CAddDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CoInitialize(NULL);//初始化COM库
_ConnectionPtr pConn(_uuidof(Connection));//利用智能指针定义了一个ADO Connection对象,
//利用关键字_uuidof获取ADO Connection接口的全局唯一标识符(GUID),对pConn对象初始化
_RecordsetPtr pRst(_uuidof(Recordset));//利用智能指针定义了一个ADO Recordset对象
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=XP-201308221218";//为数据口连接对象的连接字符串赋值
pConn->Open("","","",adConnectUnspecified);//这里可以直接为这些参数传递一个空字符串,因为它们已经在连接字符串中设置好了
//pRst=pConn->Execute("select * from 菜单",NULL,adCmdText);
//pRst->AddNew(_variant_t(m_addname),m_addprice);
//pRst->m_strName=m_addname;
//pRst->AddNew("菜名",_variant_t(m_addname));
//pRst->AddNew("单价",m_addprice);

//pRst->AddNew();
//pRst->PutCollect("菜单",_variant_t(m_addname));
//pRst->Update();

_variant_t RecordsAffected;
pRst=pConn->Execute("INSERT INTO 菜单 (菜名,单价) VALUES ((_variant_t)m_addname,(_variant_t)m_addprice)",&RecordsAffected,adCmdText);
pRst->Close();//关闭记录集
pConn->Close();//关闭连接
pRst.Release();//释放智能指针在COM接口上的引用计数
pConn.Release();
CoUninitialize();//卸载COM库



错误为:estaurant.exe 中的 0x7c812fd3 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0012ebbc 处的 _com_error。
是SQL SERVER 2000

#5


引用 1 楼 bojie5744 的回复:
是SQL SERVER 200X?
是SQL SERVER 2000

#6


打开字符串格式如下("Provider=SQLOLEDB;Data Source=XXXXXX\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=XXXXX","","",-1);
其中Data Source的值等于XXXXXX\\SQLEXPRESS,试试改为XP-201308221218\\\\SQLEXPRESS
怎么知道这条语句?如果是使用VS08,10,13的版本点击下面的看看
http://blog.csdn.net/bojie5744/article/details/34853807

#7


上面打多了个\\   
XP-201308221218\\SQLEXPRESS

#8


引用 6 楼 bojie5744 的回复:
打开字符串格式如下("Provider=SQLOLEDB;Data Source=XXXXXX\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=XXXXX","","",-1);
其中Data Source的值等于XXXXXX\\SQLEXPRESS,试试改为XP-201308221218\\\\SQLEXPRESS
怎么知道这条语句?如果是使用VS08,10,13的版本点击下面的看看
http://blog.csdn.net/bojie5744/article/details/34853807
现在的问题是可以查询记录,但是不可以用上面的方法插入一条记录

#9


是不是连接串的问题,试试这个:
_T("Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s")

#10


引用 9 楼 chenlycly 的回复:
是不是连接串的问题,试试这个:
_T("Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s")
连接串应该没有问题,因为用该串可以从数据库中读取数据,但是不能插入记录。

#11


是不是和配置数据源有关系!希望有帮助!

#12


是不是权限问题?

#13


  pRst=pConn->Execute("INSERT INTO 菜单 (菜名,单价) VALUES ((_variant_t)m_addname,(_variant_t)m_addprice)",&RecordsAffected,adCmdText);

插入语句写错了吧

#1


是SQL SERVER 200X?

#2


先单步调试下到哪一步出错,然后说下哪里。可参考这些代码http://blog.csdn.net/bojie5744/article/details/30067969

#3


是SQL SERVER 2000

#4


引用 楼主 chengdongyuan 的回复:
void CAddDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CoInitialize(NULL);//初始化COM库
_ConnectionPtr pConn(_uuidof(Connection));//利用智能指针定义了一个ADO Connection对象,
//利用关键字_uuidof获取ADO Connection接口的全局唯一标识符(GUID),对pConn对象初始化
_RecordsetPtr pRst(_uuidof(Recordset));//利用智能指针定义了一个ADO Recordset对象
pConn->ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=XP-201308221218";//为数据口连接对象的连接字符串赋值
pConn->Open("","","",adConnectUnspecified);//这里可以直接为这些参数传递一个空字符串,因为它们已经在连接字符串中设置好了
//pRst=pConn->Execute("select * from 菜单",NULL,adCmdText);
//pRst->AddNew(_variant_t(m_addname),m_addprice);
//pRst->m_strName=m_addname;
//pRst->AddNew("菜名",_variant_t(m_addname));
//pRst->AddNew("单价",m_addprice);

//pRst->AddNew();
//pRst->PutCollect("菜单",_variant_t(m_addname));
//pRst->Update();

_variant_t RecordsAffected;
pRst=pConn->Execute("INSERT INTO 菜单 (菜名,单价) VALUES ((_variant_t)m_addname,(_variant_t)m_addprice)",&RecordsAffected,adCmdText);
pRst->Close();//关闭记录集
pConn->Close();//关闭连接
pRst.Release();//释放智能指针在COM接口上的引用计数
pConn.Release();
CoUninitialize();//卸载COM库



错误为:estaurant.exe 中的 0x7c812fd3 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0012ebbc 处的 _com_error。
是SQL SERVER 2000

#5


引用 1 楼 bojie5744 的回复:
是SQL SERVER 200X?
是SQL SERVER 2000

#6


打开字符串格式如下("Provider=SQLOLEDB;Data Source=XXXXXX\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=XXXXX","","",-1);
其中Data Source的值等于XXXXXX\\SQLEXPRESS,试试改为XP-201308221218\\\\SQLEXPRESS
怎么知道这条语句?如果是使用VS08,10,13的版本点击下面的看看
http://blog.csdn.net/bojie5744/article/details/34853807

#7


上面打多了个\\   
XP-201308221218\\SQLEXPRESS

#8


引用 6 楼 bojie5744 的回复:
打开字符串格式如下("Provider=SQLOLEDB;Data Source=XXXXXX\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=XXXXX","","",-1);
其中Data Source的值等于XXXXXX\\SQLEXPRESS,试试改为XP-201308221218\\\\SQLEXPRESS
怎么知道这条语句?如果是使用VS08,10,13的版本点击下面的看看
http://blog.csdn.net/bojie5744/article/details/34853807
现在的问题是可以查询记录,但是不可以用上面的方法插入一条记录

#9


是不是连接串的问题,试试这个:
_T("Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s")

#10


引用 9 楼 chenlycly 的回复:
是不是连接串的问题,试试这个:
_T("Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s")
连接串应该没有问题,因为用该串可以从数据库中读取数据,但是不能插入记录。

#11


是不是和配置数据源有关系!希望有帮助!

#12


是不是权限问题?

#13


  pRst=pConn->Execute("INSERT INTO 菜单 (菜名,单价) VALUES ((_variant_t)m_addname,(_variant_t)m_addprice)",&RecordsAffected,adCmdText);

插入语句写错了吧