zoukankan      html  css  js  c++  java
  • 从数据池中捞取的存储过程控件使用完以后必须unprepare

    从数据池中捞取的存储过程控件使用完以后必须unprepare,否则会造成输入参数是仍是旧的BUG。

    提示:动态创建的存储过程控件无此BUG。此BUG只限于从数据池中捞取的存储过程控件。

    function TServerMethods1.spOpen(const accountNo, spName: WideString; inParams: OleVariant): OleVariant;
    var
    d: TfrmDB;
    params: TParams;
    i: Integer;
    param: TFDParam;
    begin
    Result := null;
    if (accountNo = '') or (spName = '') then
    Exit;
    d := GetDBPool(accountNo).Lock;
    if not Assigned(d) then
    Exit;
    try
    try
    d.procOpen.Close;
    d.procOpen.params.Clear;
    d.procOpen.StoredProcName := spName;
    d.procOpen.Prepare;
    params := TParams.Create;
    try
    UnpackParams(inParams, params);
    for i := 0 to params.Count - 1 do
    begin
    param := d.procOpen.FindParam(params[i].Name);
    if not Assigned(param) then
    Continue;
    param.value := params[i].value;
    end;
    finally
    params.Free;
    end;
    Result := d.dspProcOpen.Data;
    except
    on e: Exception do
    begin
    Result := null;
    Log.WriteLog('TServerMethods1.spOpen ' + e.Message);
    Exit;
    end;
    end;
    finally
    d.procOpen.Close;
    d.procOpen.Unprepare;  // 从数据池中捞取的存储过程控件使用完以后必须unprepare
    GetDBPool(accountNo).Unlock(d);
    end;
    end;

  • 相关阅读:
    洛谷 P2327 [SCOI2005]扫雷 题解
    P1388 算式 题解
    P1281 书的复制 题解
    P2896 [USACO08FEB]一起吃饭Eating Together 题解
    P1140 相似基因 题解
    变量的解构赋值
    let 和 const 命令
    第一阶段站立会议8
    第一阶段站立会议7
    第一阶段站立会议6
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/6687361.html
Copyright © 2011-2022 走看看