关于打开Recordset记录集的有关问题
关于打开Recordset记录集的问题
m_pRecordset->Open(_variant_t("select * from 系别信息"),m_pConnection.GetInterfacePtr(),
adOpenStatic,adLockOptimistic,-1);
运行之后为什么会出现DEBUG ERROR R6010
------解决方案--------------------
调式看以下m_pConnection,m_pRecordset是不是为空
------解决方案--------------------
我用的是Xproer.OleDb这个类库,以.Net风格封装的,写起代码来像堆积木一样简单。
下面是使用Xproer.OleDb对数据库进行操作的示例:
m_pRecordset->Open(_variant_t("select * from 系别信息"),m_pConnection.GetInterfacePtr(),
adOpenStatic,adLockOptimistic,-1);
运行之后为什么会出现DEBUG ERROR R6010
------解决方案--------------------
调式看以下m_pConnection,m_pRecordset是不是为空
------解决方案--------------------
我用的是Xproer.OleDb这个类库,以.Net风格封装的,写起代码来像堆积木一样简单。
下面是使用Xproer.OleDb对数据库进行操作的示例:
- C/C++ code
#include "stdafx.h" #include "XproerDataDef.h" #include "OleDb/OleDbCommand.h" #include "OleDb/OleDbConnection.h" #include "OleDb/OleDbDataReader.h" #include "OleDb/DataTable.h" #include "OleDb/DataRow.h" #include "OleDb/DataValue.h" using namespace Xproer::OleDb; //获取DataTable的示例 void ADODataTable(OleDbCommand& cmd) { int count = 0; cmd.ExecuteScalar(L"select count(*) from xdb_news",count); auto_ptr<DataTable> table; table.reset(cmd.ExecuteDataTable(L"select top 10 IsTop from xdb_news")); size_t rowCount = table->GetRowsCount(); for (int i = 0 ; i < rowCount ; ++i) { DataRow* row = table->GetRow(i); DataValue* val = row->GetCel(0); printf("时间:%d \r\n", val->ToBoolean() ); } } //使用OleDbDataReader快速读取数据的示例 void ADORead(OleDbCommand& cmd) { OleDbDataReader* r = cmd.ExecuteReader(L"select ProductPrice from xdb_news"); USES_CONVERSION; wstring title; while(r->Read()) { //r->GetString(0,title); //printf("标题:%s \r\n",W2A(title.c_str())); printf("ID:%f \r\n", r->GetFloat(0) ); } r->Close(); } //通过变量向数据库安全添加数据的示例 void ADOAdd(OleDbCommand& cmd) { cmd.SetCommandText(L"insert into xdb_about(VDouble) values(@VDouble)"); cmd.AddDoubleParam(L"@VDouble",125022.3180); cmd.ExecuteNonQuery(); } //高性能向数据库插入数据的示例 void ADOParam(OleDbCommand& cmd) { cmd.SetCommandText(L"delete from xdb_news where ID=@ID;"); cmd.AddInt32Param(L"@ID",886); cmd.SetPrepared(true); _variant_t index = (short)0; _ParameterPtr param = cmd.GetCommand()->Parameters->GetItem(index); param->Value = 887; cmd.ExecuteNonQuery(); param->Value = 888; cmd.ExecuteNonQuery(); param->Value = 889; cmd.ExecuteNonQuery(); param->Value = 890; cmd.ExecuteNonQuery(); param->Value = 891; cmd.ExecuteNonQuery(); } //向数据库添加实数的示例 void NumericScaleX(OleDbCommand& cmd) { OleDbDataReader* r = cmd.ExecuteReader(L"select ProductPrice from xdb_news"); _RecordsetPtr& rs = r->GetRecordsetPtr(); rs->MoveFirst(); _variant_t vi = (short)0; FieldPtr fd = rs->Fields->GetItem(vi); unsigned char numeri = fd->GetNumericScale(); unsigned char precision = fd->GetPrecision(); printf("GetNumericScale:%d\r\n", fd->GetNumericScale() ); printf("GetPrecision:%d\r\n", fd->GetPrecision() ); printf("Value:%f\r\n", (float)fd->Value ); r->Close(); } int _tmain(int argc, _TCHAR* argv[]) { ::CoInitialize(NULL); OleDbConnection con; con.SetAccessConStr(L"F:\\vc9\\adoDemo\\Debug\\db.mdb"); con.Open(); OleDbCommand cmd(&con); ADORead(cmd); con.Close(); ::CoUninitialize(); //printf("总数:%d",count); system("pause"); return 0; }
------解决方案--------------------
m_pRecordset初始化了吗?