首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

存储过程解决思路

2012-02-08 
存储过程我对存储过程不太懂,想请大家看看下面的strSql.Format(....)里面的存储过程错在哪里,SQL语句是没

存储过程
我对存储过程不太懂,想请大家看看下面的strSql.Format(....)里面的存储过程错在哪里,SQL   语句是没有问题的,但按下面的写法,到达m_shu-> Open(...)时就通不过了。请求大家给予帮助。谢谢。

CString   strSql   ;

strSql.Format( "declare   @sql   varchar(400)   set   @sql= 'SELECT   DeviceID   AS   id,   DevicePeriod   AS   dp,   CarCard   AS   card   FROM   DeviceID   WHERE   (DeviceID   IN(SELECT   DeviceID   FROM   Map   WHERE '+   @csact+   '=TRUE   )) '   execute(@sql)   ");

m_shu-> Open(_bstr_t(strSql),_variant_t((IDispatch       *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);


这其中上面是两个表:
                    map   表
字段:     DeviceID       A1     A2

                    DeviceID表
字段:DeviceID     DevicePeriod   CarCard

csact是如下的定义,它是代码map表中的字段A1、A2中的某一个的变量
CString             csact;
m_comboaccount.GetLBText(actindex,csact);    
               


[解决办法]
这个不算是存储过程,只是一个带参数的批sql语句
如果你确定你的批sql语句没有错


if(FAILED(::CoInitialize(NULL)))
return;
try
{
_ConnectionPtr pConn = NULL ;
_RecordsetPtr pRs = NULL ;
_RecordsetPtr pRs2 = NULL ;
_CommandPtr comm = NULL ;
_ParameterPtr param =NULL ;

HRESULT hr = S_OK;

_bstr_t strCnn( "Driver={SQL Server};Server=(local);Uid=sa;Pwd=;DataBase=test ");

pConn.CreateInstance(__uuidof(Connection));
pConn-> CursorLocation =adUseClient;
pConn-> ConnectionTimeout =60;
pConn-> Open (_bstr_t(strCnn),_bstr_t( " "),_bstr_t( " "),adModeUnknown);

comm.CreateInstance(__uuidof(Command));
param.CreateInstance(__uuidof(Parameter));
//pRs.CreateInstance(__uuidof(Recordset));

comm-> ActiveConnection=pConn;
comm-> CommandType=adCmdStoredProc;
comm-> CommandText= "execute(?) ";//这个问号是重点,参数化批sql语句的方法

_bstr_t sqlparam( "SELECT DeviceID AS id, DevicePeriod AS dp, CarCard AS card FROM DeviceID WHERE (DeviceID IN(SELECT DeviceID FROM Map WHERE '+ @csact+ '=TRUE )) ");

param = comm-> CreateParameter ( "@sql ",adVarChar,adParamInput,400,sqlparam);
comm-> Parameters-> Append(param);

comm-> Execute(NULL,NULL,adCmdText);
if (pConn)
if (pConn-> State == adStateOpen)
pConn-> Close();
}
catch (_com_error pCome)
{
TRACE( "Error info: %s \n ", (LPCTSTR)(_bstr_t)(pCome.Description()));
TRACE( "Error info: %s \n ", (pCome.ErrorMessage()));

}
::CoUninitialize();

热点排行