<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      USEGEAR

      導航

      restful 服務器一個問題,看ChatGPT的威力 (續2)

      實際上Pascal是一個非常優美的語言。只是仁者見仁智者見智。

      我們一直埋怨,而不是埋怨自己。說到底:功力不夠。想短平快,功底又不夠,這就是挑戰。

      datasnap很復雜,但是又很簡單。寫了夠小的破restful服務程序,動不動出問題。

      在多次交流中,你會不斷理解和提高。

       

       

       

      # Delphi + REST + 多線程數據庫連接規范清單
      
      ## ?? 目標
      
      短連接、線程安全、資源無泄漏、TCP 不掛起
      
      ---
      
      ## 1?? 連接創建原則
      
      - 所有方法中**禁止使用組件字段** `FDConnection1` 直接執行查詢
      - **統一使用局部變量**:`LConn: TFDConnection`
      - 建議封裝工具函數統一創建連接:`CreateLocalFDConnectionFromTemplate`
      
      ---
      
      ## 2?? 安全連接參數設置
      
      ```pascal
      LConn := TFDConnection.Create(nil);
      LConn.LoginPrompt := False;
      LConn.Params.Assign(FDConnection1.Params);
      LConn.Params.Pooled := False;
      LConn.Connected := True;
      ```
      
      ---
      
      ## 3?? 查詢/操作對象規則
      
      ```pascal
      LQuery := TFDQuery.Create(nil);
      LQuery.Connection := LConn;
      ```
      
      不要使用設計時組件字段,如 `FDQuery1`, `FDCommand1`。
      
      ---
      
      ## 4?? 釋放規則(必須使用 try..finally)
      
      ```pascal
      try
        // 操作
      finally
        if LConn.Connected then LConn.Close;
        LConn.Free;
      end;
      ```
      
      如使用賬套切換:
      
      ```pascal
      FDManager.CloseConnectionDef(LConn.ConnectionDefName);
      ```
      
      ---
      
      ## 5?? 多線程場景特殊規則
      
      - 所有數據庫對象(連接、查詢)必須是**局部變量**
      - 禁止在線程中訪問 `FDConnection1` 組件字段
      - 使用 `TTask`, `TThread`, `TEvent`, `TInterlocked` 做線程同步
      - 使用 `PostLog` 記錄連接耗時及釋放日志
      
      ---
      
      ## 6?? 調試建議
      
      ```pascal
      FDManager.Tracing := True;
      FDManager.TraceFileName := 'FDTrace.log';
      ```
      
      查詢 SQL Server 當前連接:
      
      ```sql
      SELECT * FROM sys.dm_exec_connections WHERE session_id <> @@SPID;
      ```
      
      查看連接數:
      
      ```pascal
      ShowMessage(IntToStr(FDManager.ActiveConnections));
      ```
      
      ---
      
      ## 7?? REST 方法封裝建議
      
      ```pascal
      function GetFDJSONDatasets(aSqlExpr: string): TFDJSONDatasets;
      var
        LConn: TFDConnection;
        LQuery: TFDQuery;
      begin
        LConn := CreateLocalFDConnectionFromTemplate(FDConnection1);
        try
          LQuery := TFDQuery.Create(nil);
          try
            LQuery.Connection := LConn;
            LQuery.SQL.Text := aSqlExpr;
            LQuery.Open;
            Result := TFDJSONDataSetsWriter.WriteDataSets([LQuery]);
          finally
            LQuery.Free;
          end;
        finally
          if LConn.Connected then LConn.Close;
          LConn.Free;
        end;
      end;
      ```
      
      ---
      
      ## 推薦封裝函數
      
      ```pascal
      function CreateLocalFDConnectionFromTemplate(BaseConn: TFDConnection): TFDConnection;
      begin
        Result := TFDConnection.Create(nil);
        Result.LoginPrompt := False;
        Result.Params.Assign(BaseConn.Params);
        Result.Params.Pooled := False;
        Result.Connected := True;
      end;
      ```
      
      ---
      
      ## ? 結語
      
      > 短連接 REST 服務的本質是:**每次來一個連接,用完立即釋放,絕不殘留。**

       

       

       

       

      posted on 2025-04-02 19:02  USEGEAR  閱讀(32)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲婷婷六月的婷婷| 青青草无码免费一二三区| 最新亚洲人成网站在线影院| 99久久国产精品无码| 最新的国产成人精品2022 | 亚洲aⅴ综合av国产八av| 2021国产成人精品久久| 亚洲欧洲日产国产 最新| 国产蜜臀av在线一区二区| 成全影院电视剧在线观看| 欧美牲交a欧美牲交aⅴ图片| 亚洲色欲在线播放一区| 国产成人午夜精品影院| 久久国产欧美日韩精品图片| 亚洲精品三区二区一区一| 99亚洲男女激情在线观看| 人人妻人人做人人爽| 中文字幕亚洲综合第一页| 日韩熟女熟妇久久精品综合| 日区中文字幕一区二区| 丁香五月婷激情综合第九色| 欧洲无码一区二区三区在线观看| 韩国免费A级毛片久久| 赤城县| 天堂网av最新版在线看| 日本一区二区三区东京热| 中文国产日韩欧美二视频| 亚洲人成人伊人成综合网无码| 偷拍视频一区二区三区四区 | 性久久久久久| 亚洲国产综合性亚洲综合性| 国产精品久久久久7777| 在线观看免费人成视频色9| 亚洲的天堂在线中文字幕| 午夜在线观看成人av| 动漫AV纯肉无码AV电影网| 日本一区二区三区在线播放| 午夜精品亚洲一区二区三区| 国产精品亚洲综合色区丝瓜| 国产亚洲精品久久久久婷婷图片 | 未满十八18禁止免费无码网站|