FDO定义了大量的命令用于执行要素相关的功能,但是仍然屏蔽了对于许多数据源特有的功能。对于RDBMS类型的数据源,FDO提供了执行SQL语句的功能,让用户可以调用某些单纯使用FDO无法实现的功能。当然,某一种Provider是否支持执行SQL语句还需要看它的能力。
FDO将SQL语句分为了两类,一类为包含关键词“Select”的SQL语句,执行这类SQL语句会返回一个结果集,另一类是不包含关键词“Select”的SQL语句,执行这类SQL语句只会返回RDBMS中影响的行数。
使用FdoISQLCommand命令可以针对RDBMS数据源执行SQL语句,调用方法FdoISQLCommand::ExecuteReader()用于执行包含关键词“Select”的SQL语句,它返回一个类型为FdoISQLDataReader的读取器,调用方法FdoISQLCommand::ExecuteNonQuery()用于执行不包含关键词“Select”的SQL语句,它返回RDBMS中影响的行数。
如果FdoICommandCapabilities::SupportsParameters()返回true,那么在执行 SQL 语句前,可以将SQL语句中的参数绑定到某个变量。如下的代码展示了如何执行一个包含关键词“Select”的SQL语句,并且将SQL语句中的参数标记“:param1”绑定到一个变量。
// 创建SQL命令 FdoPtr<FdoISQLCommand> sqlCmd = static_cast<FdoISQLCommand*> (conn->CreateCommand(FdoCommandType_SQLCommand)); // 设置SQL语句 sqlCmd->SetSQLStatement(L"select * from parcels f where id=:parm1"); // 绑定参数param1 FdoPtr<FdoParameterValueCollection> parmVals = sqlCmd->GetParameterValues(); FdoPtr<FdoInt32Value>id = FdoInt32Value::Create(1); parmVals->Add(FdoPtr<FdoParameterValue>(FdoParameterValue::Create(L"parm1", id))); // 执行命令 FdoPtr<FdoISQLDataReader> reader = sqlCmd->ExecuteReader(); // 遍历查询结果 if (reader->ReadNext()) { ...... } reader->Close(); |