如果Command执行的是具有返回数据条目的SQL语句。如:SELECT语句。那么Recordset比较好理解。 但是如果Command执行的是一个DELETE或是UPDATE语句或是其它的存储过程的话,那么返回的Recordset对象指针是什么呢?
如果不知道Command执行的是什么SQL语句的情况下如何判断呢?比如下面的函数_RecordsetPtr GetRecordset(_ConnectionPtr& pConn,_bstr_t str_sql)
{
HRESULT hr = S_OK;
_CommandPtr pCmd = NULL;
hr = pCmd.CreateInstance(__uuidof(Command));
if(hr != S_OK)
{
//记录集创建失败
//char* err_buf = "EE记录集创建失败";
//send(sock,err_buf,strlen(err_buf)+1,0);
return;
}
pCmd->ActiveConnection = pConn;
pCmd->CommandText = strsql; return pCmd->Execute(NULL,NULL,adCmdUnknown);
}如果strsql传的是一个SELECT语句。那么返回的Recordset对象指针自然好办。
如果strsql传的是一个UPDATE或是DELETE语句。那么此时返回的Recordset对象指针是什么呢?
如果不知道Command执行的是什么SQL语句的情况下如何判断呢?比如下面的函数_RecordsetPtr GetRecordset(_ConnectionPtr& pConn,_bstr_t str_sql)
{
HRESULT hr = S_OK;
_CommandPtr pCmd = NULL;
hr = pCmd.CreateInstance(__uuidof(Command));
if(hr != S_OK)
{
//记录集创建失败
//char* err_buf = "EE记录集创建失败";
//send(sock,err_buf,strlen(err_buf)+1,0);
return;
}
pCmd->ActiveConnection = pConn;
pCmd->CommandText = strsql; return pCmd->Execute(NULL,NULL,adCmdUnknown);
}如果strsql传的是一个SELECT语句。那么返回的Recordset对象指针自然好办。
如果strsql传的是一个UPDATE或是DELETE语句。那么此时返回的Recordset对象指针是什么呢?
操作时根据情况选择调用的函数。
或者在字符串的前面检查是否有"select"字符串。
如果返回的不是“有效”的Recordset(如Update或是Delete执行结果),那就告诉客户端执行的结果(是成功还是失败,如果失败把失败的原因发给客户端)。所以当然我就是需要通过这个Execute的返回_RecordsetPtr对象指针来判断到底执行的是何种类型的SQL语句。然后我才采取相应的动作。现在我就是不知道如果执行的是Update或Delete诸如此类的语句返回的_RecordsetPtr对象指针到底是什么东西。对这个指针进行操作都会报异常。。按道理我想应该可以通过这个指针进行判断的才对,有没有哪个大哥告诉小弟一下,用C++操作ADO写的不多。不是很熟悉。
select语句返回recordset,那么其他sql语句也必须返回recordset,
update,delete返回的recordset应该是空的。
如果客户端传来的标志位是"SELECT",然而传来的SQL语句却是UPDATE怎么办?所以这样做会造成冗余.数据不一致.
赞同,你做法保证民标志位和SQL语句匹配.
当Execute执行Update这类语句的时候如果不设置adExecuteNoRecords的时候.返回一个已经关闭的Recordset.如果设置了adExecuteNoRecords返回NothingMDSN原话:If the command is not intended to return results (for example, an SQL UPDATE query) the provider returns Nothing as long as the option adExecuteNoRecords is specified; otherwise Execute returns a closed Recordset. Some application languages allow you to ignore this return value if no Recordset is desired.