create procedure reader_insert
(@p_Rid varchar(12),
@p_Rname varchar(12),
@p_Rno varchar(12),
@p_Runit varchar(12),
@p_Rindentify varchar(10),
@p_Rsex char(2),
@p_Rtel varchar(12),
@p_Rbegin datetime,
@p_Rend datetime,
@p_Rfoul char(2),
@p_Rremark varchar(50)=null)
as
insert into reader(Rid,Rname,Rno,Runit,Ridentify,Rsex,Rtel,Rbegin,Rend,Rremark)
values(@p_Rid,@p_Rname,@p_Rno,@p_Runit,@p_Rindentify,@p_Rsex,@p_Rtel,@p_Rbegin,@p_Rend,@p_Rremark)
还需要什么输出参数不啊?如果能直接调用这存储过程,语句怎么用啊?谢谢啊
8 个解决方案
#1
ADO方式执行存储过程,带参数传递,你可以参考下
//执行存储过程。
_RecordsetPtr& ADOConn::ExecuteSP(_bstr_t bstrSQL, _variant_t vtdays)
{
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pCommand.CreateInstance(__uuidof(Command));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandText = bstrSQL;//存储过程名
m_pCommand->PutCommandType(adCmdStoredProc);
m_pCommand->Parameters->Refresh();//从数据库查询参数信息
//接下来对每一个参数赋值。
long cnt = m_pCommand->Parameters->GetCount();//取得参数的个数
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
//执行这个存储过程
m_pRecordset = m_pCommand->Execute(0,0,adCmdStoredProc);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}
#2
代码大概如楼上,对于输出参数,Parameter对象有它的属性标明这是一个输入参数还是输出参数(必须和存储过程的定义一致),这样执行完之后,输出参数就会被赋值给那个Parameter。
#3
也就是说我如果象插入这些不关心输出的存储过程,就可以不需要输出参数,而直接调用上面的存储过程也可以?
#4
对
我上面调用的存储过程是有参数的,你不管参数就可以了
我上面调用的存储过程是有参数的,你不管参数就可以了
#5
但是插入要从窗体中获得插入的参数,你上面的给参数赋直还是要要吧?
#6
ExecuteSP(_bstr_t bstrSQL, _variant_t 参数1,_variant_t 参数2.....)
自己指定就可以了
在这个位置,要把参数与存储过程一一对应:
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
自己指定就可以了
在这个位置,要把参数与存储过程一一对应:
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
#7
/* 填写参数 */
param = cmd->CreateParameter("v_Dybm",adVarNumeric,adParamInput,4,_variant_t( lDybm, VT_I4 )); //地域编码
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nMaxNum",adVarNumeric,adParamInput,4,_variant_t( lCallNum, VT_I4 )); //最大选择数
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nSelNum",adInteger,adParamOutput,sizeof(int),va);
cmd->Parameters->Append(param);
/* 执行存储过程 */
cmd->ActiveConnection = CAdoData.pDBConn;
cmd->CommandType = adCmdStoredProc;
// cmd->CommandText = _bstr_t("CalloutAssign_PKG.insert_yyljtzb");
cmd->CommandText = _bstr_t("insert_yyljtzb");
param = cmd->CreateParameter("v_Dybm",adVarNumeric,adParamInput,4,_variant_t( lDybm, VT_I4 )); //地域编码
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nMaxNum",adVarNumeric,adParamInput,4,_variant_t( lCallNum, VT_I4 )); //最大选择数
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nSelNum",adInteger,adParamOutput,sizeof(int),va);
cmd->Parameters->Append(param);
/* 执行存储过程 */
cmd->ActiveConnection = CAdoData.pDBConn;
cmd->CommandType = adCmdStoredProc;
// cmd->CommandText = _bstr_t("CalloutAssign_PKG.insert_yyljtzb");
cmd->CommandText = _bstr_t("insert_yyljtzb");
#8
很感谢上述的例子,但是执行该函数时参数的类型并不是_variant_t类型,括号里要怎么写呢?急用,急用
#1
ADO方式执行存储过程,带参数传递,你可以参考下
//执行存储过程。
_RecordsetPtr& ADOConn::ExecuteSP(_bstr_t bstrSQL, _variant_t vtdays)
{
try
{
// 是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
// Connection对象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pCommand.CreateInstance(__uuidof(Command));
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandText = bstrSQL;//存储过程名
m_pCommand->PutCommandType(adCmdStoredProc);
m_pCommand->Parameters->Refresh();//从数据库查询参数信息
//接下来对每一个参数赋值。
long cnt = m_pCommand->Parameters->GetCount();//取得参数的个数
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
//执行这个存储过程
m_pRecordset = m_pCommand->Execute(0,0,adCmdStoredProc);
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}
#2
代码大概如楼上,对于输出参数,Parameter对象有它的属性标明这是一个输入参数还是输出参数(必须和存储过程的定义一致),这样执行完之后,输出参数就会被赋值给那个Parameter。
#3
也就是说我如果象插入这些不关心输出的存储过程,就可以不需要输出参数,而直接调用上面的存储过程也可以?
#4
对
我上面调用的存储过程是有参数的,你不管参数就可以了
我上面调用的存储过程是有参数的,你不管参数就可以了
#5
但是插入要从窗体中获得插入的参数,你上面的给参数赋直还是要要吧?
#6
ExecuteSP(_bstr_t bstrSQL, _variant_t 参数1,_variant_t 参数2.....)
自己指定就可以了
在这个位置,要把参数与存储过程一一对应:
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
自己指定就可以了
在这个位置,要把参数与存储过程一一对应:
for(long k = 1; k<cnt; k++)
{//由于ADO中认为返回值是第一个参数, 因此这里用k=1过滤第一个参数
m_pCommand->Parameters->GetItem(k)->Value = vtdays; //按存储过程的参数顺序给参数赋值。
}
#7
/* 填写参数 */
param = cmd->CreateParameter("v_Dybm",adVarNumeric,adParamInput,4,_variant_t( lDybm, VT_I4 )); //地域编码
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nMaxNum",adVarNumeric,adParamInput,4,_variant_t( lCallNum, VT_I4 )); //最大选择数
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nSelNum",adInteger,adParamOutput,sizeof(int),va);
cmd->Parameters->Append(param);
/* 执行存储过程 */
cmd->ActiveConnection = CAdoData.pDBConn;
cmd->CommandType = adCmdStoredProc;
// cmd->CommandText = _bstr_t("CalloutAssign_PKG.insert_yyljtzb");
cmd->CommandText = _bstr_t("insert_yyljtzb");
param = cmd->CreateParameter("v_Dybm",adVarNumeric,adParamInput,4,_variant_t( lDybm, VT_I4 )); //地域编码
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nMaxNum",adVarNumeric,adParamInput,4,_variant_t( lCallNum, VT_I4 )); //最大选择数
cmd->Parameters->Append(param);
param = cmd->CreateParameter("v_nSelNum",adInteger,adParamOutput,sizeof(int),va);
cmd->Parameters->Append(param);
/* 执行存储过程 */
cmd->ActiveConnection = CAdoData.pDBConn;
cmd->CommandType = adCmdStoredProc;
// cmd->CommandText = _bstr_t("CalloutAssign_PKG.insert_yyljtzb");
cmd->CommandText = _bstr_t("insert_yyljtzb");
#8
很感谢上述的例子,但是执行该函数时参数的类型并不是_variant_t类型,括号里要怎么写呢?急用,急用