可以使用系统的TADOConnection 组件,这里使用原生对象来操作,只用于学习
1.导入ado库 import library ,生成adodb_ocx.h,adodb_tlb.h
2.修改生成的头文件,
- String sql_update = "update userinfo set name = 'abc'";
- TConnection* db = new TConnection(this);
- int iState =0 ;
-
- try
- {
- try
- {
-
- db->ConnectionString = UTF8Decode("Provider=SQLOLEDB.1;Password=000000;Persist Security Info=True;User ID=sa;Initial Catalog=TEST;Data Source=127.0.0.1");
- db->Open(NULL,NULL,NULL,adConnectUnspecified);
-
- if(db->State != adStateOpen) ;
- {
-
- if(db->Errors->Count >0)
- {
- Variant i = 0 ;
- String str = db->Errors->get_Item(i)->Description ;
-
- MessageBox(Handle,str.c_str(),"error",MB_ICONSTOP);
- }
-
- return ;
- }
-
- Variant iRows = -1;
-
- db->Execute(UTF8Decode(sql_update),iRows,adCmdText);
- Edit1->Text = IntToStr(iRows.lVal);
- }
- catch(Exception& e )
- {
-
- if(db->Errors->Count >0)
- {
- Variant i = 0 ;
- String str = db->Errors->get_Item(i)->Description ;
-
- MessageBox(Handle,str.c_str(),"error",MB_ICONSTOP);
- }
- }
-
- }
- __finally
- {
- db->Close();
- delete db ;
- }
遇到的错误:
1.函数调用,没用任何反应:
修改h文件中的声明
__property BSTR ConnectionString={ read=get_ConnectionString,write = set_ConnectionString, stored=false};
stored=false 改为stored=true
2.com异常提示框 "HRCHECK"
#if !defined(OLECHECK)
#define OLECHECK(hrexpr) DebugHlpr_HRCHECK(hrexpr, #hrexpr, __FILE__, __LINE__)
#endifvoid DebugHlpr_THROW(T* msg, HRESULT hr, T* file, bool /*assertFailed*/)
{
#if defined(ComObjHPP)
// NOTE: This does not retrieve rich error information, the way Delphi and VB environments
// do. Eventually this 'throw' will either throw a rich EOleException or some other
// OLE exception class (something equivalent to _com_error, maybe??)
//
// For now, you can specialized [T = TCHAR] 'DebugHlpr_THROW' to retrieve rich error
// information and throw a VCL exception class, if you're using VCL classes already,
// or throw a custom exception class.
//
// NOTE: Use the assertFailed parameter to distinguish between Assertion and
// OLECHECK failures. (Maybe throw something different??)
throw EOleException(msg, hr, file, _T(""), 0);
#else
throw msg; // Hopefully we never get here: Need something much better to throw!!
#endif
}
处理:#define OLECHECK 1,默认是检查OLE异常
#if !defined(PROMPT_ON_HRCHECK_FAILURE)
int i = IDYES;
#else
int i = DebugHlpr_PROMPT(_T("HRCHECK: "), szMsg);
#endif
if (i == IDYES)
DebugHlpr_THROW(szMsg, hr,lfile, false);
else if (i == IDCANCEL)
::DebugBreak();
// NOTE: IDNO - implies we keep chugging along
}
处理:#define PROMPT_ON_HRCHECK_FAILURE 1 ,就不会在运行时报HRCHECK提示框