在VC中如何实现对存储过程的循环调用?

原创 2004年07月14日 08:57:00

// 声明对象
_ConnectionPtr  Conn1;
_CommandPtr Cmd1;
_RecordsetPtr  Rs1;
_ParameterPtr  param;

// 初始化

 ::CoInitialize(NULL);
param.CreateInstance("ADODB.Parameter");

HRESULT hr = Cmd1.CreateInstance(__uuidof(Command));
if(FAILED(hr))
{
AfxMessageBox("_CommandPtr初始化失败");
 return ;
}

CString strSQLStore;  // 组织sql语句
strSQLStore ="update "+strTableName   +" set GWERRORCODE=93 where USERNUMBER = ParamUserNumber; ";

// 实现在程序中创建存储过程
_bstr_t bstrCreate( 
L"create  or replace procedure  UpdateDB ( ParamUserNumber  varchar2)   "
L" as "
L" begin "
+strSQLStore+
L" commit; end ;");
_bstr_t  bstrSP(L"UpdateDB" );
 m_pCon->Execute(bstrCreate,NULL,adCmdText);
 //m_pCon->Execute(bstrCreate,&RecordsetAffected,amdText);

// 关联连接,m_pCon是_ConnectionPtr 类型的已有的活动连接
Cmd1->ActiveConnection =  m_pCon;
Cmd1->CommandTex  =  bstrSP;
Cmd1->CommandType = adCmdStoredProc;

// 存储过程入口参数的初始化
_variant_t varTemp;
CString test ;
param->Name="ParamUserNumber";
param->Type=adChar;
param->Size=20;
param->Direction=adParamInput;
int y = Cmd1->Parameters->Count;
Cmd1->Parameters->Append(param);
Cmd1->Parameters->Refresh();

// 循环执行存储过程
CString strSQL;
while(LineNo){
 // 刷新界面,处理其它请求

MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
if(m_bExit)
{
return;
}
if(m_bStop)
{
// 如果检测到有暂停的消息

MSG msg;
while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
Sleep(1);
if(IDYES == MessageBox("是否暂停执行存储过程?"提示",MB_YESNO+MB_ICONQUESTION))
return;
}

 // 每一行的信息,代表了要查询的入口参数的值

LineInfo = LineArray[LineNo];

LineInfo.number = L"'"
+LineInfo.number+
L"'"; // 参数格式化

 

// 参数赋值
//Cmd1->GetPrepared();
test = LineInfo.number;
varTemp.vt = VT_BSTR;
varTemp.bstrVal = (_bstr_t)test;
Cmd1->Parameters->Item[(short)0]->Value  = varTemp.bstrVal;

 // 执行存储过程
Cmd1->Execute(NULL, NULL, adCmdStoredProc);

try
{
m_pRs->Open(strSQL.AllocSysString(),m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);?
}

LineNo++;
m_ProgressCtrl.SetPos(LineNo);
}

循环调用存储过程代码

发现SQL存储过程中中批量循环 修改数据表中的字段内容时把历史的字段数值插入到另外的数据表中操作比在ASP中要简单多,速度快多了.实际业务应用范围可以是.从公司历史定单数据表中查询某段时间内的一批用户...
  • xqf222
  • xqf222
  • 2007年11月15日 22:42
  • 4231

Oracle存储过程中利用数组循环调用另一存储过程

代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-...
  • hwt0101
  • hwt0101
  • 2015年12月14日 17:53
  • 1147

Oracle使用游标循环调用存储过程

-- 声明游标;CURSOR cursor_name IS select_statement --For 循环游标 --(1)定义游标 --(2)定义游标变量 --(3)使用for循环来使用这...
  • ptzrbin
  • ptzrbin
  • 2013年04月26日 14:30
  • 4476

Sql语句 循环调用存储过程 设置1秒执行一次!

一个日结的存储过程P_Wms_StockDailyState 参数是格式是'yyyy-MM-dd' 这个存储过程必须一天结算一次!比如在每天的几点几时几分执行这个存储过程! 现在呢 想把之前的...
  • jindou910101
  • jindou910101
  • 2013年06月08日 09:58
  • 1328

调用存储过程对象

 存储过程是存储在数据库中的一个访问数据库的程序代码,一个存储过程对象提供了一种访问所有关系型数据库的存储过程的方法。一个CallableStatement对象中包含了对一个存储过程的调用,这种调用可...
  • zxyvb
  • zxyvb
  • 2008年04月01日 12:17
  • 3353

VC中使用ADO调用存储过程

_ConnectionPtr m_pConnection; _CommandPtr m_pCommand;.cpp中在函数中执行//建立ado连接 HRESULT hr; hr=m_pConnecti...
  • max2008
  • max2008
  • 2007年06月10日 13:32
  • 951

VC++调用带参数的存储过程

最近由于工作之需,要利用VC进行一些高级的数据库操作,如执行存储过程等。遍寻网络资源发现好使的不多(经常#30XX错误,大部分应该是COM的VARIANT数据类型所致,其实有个讨巧的方法,请看下文),...
  • aa211314
  • aa211314
  • 2008年02月28日 16:11
  • 5502

plsql之存储过程的调用和执行

存储过程  1 什么是存储过程?      用于在数据库中完成特定的操作或者任务。是一个PLSQL程序块,可以永久的保存在数据库中以供其他程序调用。    2 存储过程的参数模式      存储过程的...
  • xys_777
  • xys_777
  • 2011年11月15日 09:15
  • 40216

SHELL脚本直接调用存储过程

#!/bin/bash export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export...
  • hardyer
  • hardyer
  • 2018年01月09日 09:41
  • 118

在Java中怎么调用存储过程

 以前做开发都是直接写SQL语句,最近这个工程领导要求凡是跟数据库交互的都要用存储过程,开始还遇到了一些困难,但还是搞定了,现在在这把我的成果告诉大家,与大家一起分享,有句话说得好啊,一个人乐那不叫乐...
  • combai
  • combai
  • 2008年04月12日 10:51
  • 2096
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC中如何实现对存储过程的循环调用?
举报原因:
原因补充:

(最多只允许输入30个字)