存储过程
我对存储过程不太懂,想请大家看看下面的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();