最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)將MySQL的存儲(chǔ)過程轉(zhuǎn)換為PostgreSQL

 更新時(shí)間:2025年10月23日 08:33:21   作者:weixin_30777913  
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)將MySQL的存儲(chǔ)過程轉(zhuǎn)換為PostgreSQL,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本文將介紹使用C#程序?qū)崿F(xiàn)將MySQL的存儲(chǔ)過程轉(zhuǎn)換為PostgreSQL的函數(shù),以下是完整代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

class Program
{
    private static string _currentCode = "";

    static void Main(string[] args)
    {
        Console.WriteLine("=============================================");
        Console.WriteLine("?? MySQL 存儲(chǔ)過程 → PostgreSQL 函數(shù) 遷移工具");
        Console.WriteLine("=============================================");
        Console.WriteLine("本工具支持將 MySQL 存儲(chǔ)過程代碼逐步或整體轉(zhuǎn)換為 PostgreSQL 函數(shù)。");
        Console.WriteLine("包含 10 個(gè)核心遷移步驟:結(jié)構(gòu)、類型、變量、控制流、游標(biāo)、異常、事務(wù)、DML、臨時(shí)表、調(diào)用。");
        Console.WriteLine();

        while (true)
        {
            Console.WriteLine("請(qǐng)選擇操作:");
            Console.WriteLine("1?? 輸入完整的 MySQL 存儲(chǔ)過程代碼,進(jìn)行全自動(dòng)遷移");
            Console.WriteLine("2?? 手動(dòng)選擇要轉(zhuǎn)換的步驟(逐步遷移)");
            Console.WriteLine("3?? 查看當(dāng)前轉(zhuǎn)換狀態(tài)");
            Console.WriteLine("0?? 退出");
            Console.Write("?? 請(qǐng)輸入選項(xiàng) (0-3): ");

            string choice = Console.ReadLine();

            if (choice == "0")
            {
                Console.WriteLine("?? 感謝使用,再見!");
                break;
            }
            else if (choice == "1")
            {
                HandleFullMigration();
            }
            else if (choice == "2")
            {
                HandleStepByStepMigration();
            }
            else if (choice == "3")
            {
                ShowCurrentStatus();
            }
            else
            {
                Console.WriteLine("? 無(wú)效選項(xiàng),請(qǐng)重新輸入。");
            }
        }
    }

    static void HandleFullMigration()
    {
        Console.WriteLine("\n?? 請(qǐng)輸入您的完整 MySQL 存儲(chǔ)過程代碼(包括 CREATE PROCEDURE ... BEGIN ... END):");
        Console.WriteLine("(輸入完成后,請(qǐng)按 Enter 兩次結(jié)束輸入)");

        string mysqlCode = ReadMultilineInput();
        if (string.IsNullOrWhiteSpace(mysqlCode))
        {
            Console.WriteLine("? 未輸入代碼,返回主菜單。");
            return;
        }

        Console.WriteLine("\n?? 開始全自動(dòng)遷移(應(yīng)用所有 10 個(gè)步驟)...");

        _currentCode = mysqlCode;

        // 應(yīng)用所有轉(zhuǎn)換步驟
        _currentCode = ConvertProcedureToFunction(_currentCode);
        _currentCode = ConvertDataTypes(_currentCode);
        _currentCode = ConvertVariables(_currentCode);
        _currentCode = ConvertControlFlow(_currentCode);
        _currentCode = ConvertCursors(_currentCode);
        _currentCode = ConvertExceptionHandlers(_currentCode);
        _currentCode = ConvertTransactions(_currentCode);
        _currentCode = ConvertDmlAndQueries(_currentCode);
        _currentCode = ConvertTempTablesAndVars(_currentCode);
        _currentCode = ConvertFunctionCalls(_currentCode);

        DisplayFinalResult();
    }

    static void HandleStepByStepMigration()
    {
        if (string.IsNullOrEmpty(_currentCode))
        {
            Console.WriteLine("\n?? 請(qǐng)輸入 MySQL 存儲(chǔ)過程代碼:");
            _currentCode = ReadMultilineInput();
            if (string.IsNullOrWhiteSpace(_currentCode))
            {
                Console.WriteLine("? 未輸入代碼,返回主菜單。");
                return;
            }
        }

        while (true)
        {
            Console.WriteLine("\n?? 請(qǐng)選擇要執(zhí)行的轉(zhuǎn)換步驟:");
            Console.WriteLine("1??  存儲(chǔ)過程結(jié)構(gòu)轉(zhuǎn)換");
            Console.WriteLine("2??  數(shù)據(jù)類型映射");
            Console.WriteLine("3??  變量聲明轉(zhuǎn)換");
            Console.WriteLine("4??  控制流語(yǔ)句轉(zhuǎn)換");
            Console.WriteLine("5??  游標(biāo)操作轉(zhuǎn)換");
            Console.WriteLine("6??  異常處理轉(zhuǎn)換");
            Console.WriteLine("7??  事務(wù)控制轉(zhuǎn)換");
            Console.WriteLine("8??  DML 與查詢語(yǔ)句轉(zhuǎn)換");
            Console.WriteLine("9??  臨時(shí)表與表變量處理");
            Console.WriteLine("??  函數(shù)調(diào)用與集成轉(zhuǎn)換");
            Console.WriteLine("?? 查看當(dāng)前轉(zhuǎn)換狀態(tài)");
            Console.WriteLine("?? 完成轉(zhuǎn)換并顯示結(jié)果");
            Console.WriteLine("0??  返回主菜單");
            Console.Write("?? 請(qǐng)輸入選項(xiàng) (0-11): ");

            string stepChoice = Console.ReadLine();

            if (stepChoice == "0") break;
            if (stepChoice == "11")
            {
                DisplayFinalResult();
                break;
            }

            switch (stepChoice)
            {
                case "1": _currentCode = ConvertProcedureToFunction(_currentCode); break;
                case "2": _currentCode = ConvertDataTypes(_currentCode); break;
                case "3": _currentCode = ConvertVariables(_currentCode); break;
                case "4": _currentCode = ConvertControlFlow(_currentCode); break;
                case "5": _currentCode = ConvertCursors(_currentCode); break;
                case "6": _currentCode = ConvertExceptionHandlers(_currentCode); break;
                case "7": _currentCode = ConvertTransactions(_currentCode); break;
                case "8": _currentCode = ConvertDmlAndQueries(_currentCode); break;
                case "9": _currentCode = ConvertTempTablesAndVars(_currentCode); break;
                case "10": _currentCode = ConvertFunctionCalls(_currentCode); break;
                case "??": ShowCurrentStatus(); break;
                default: Console.WriteLine("? 無(wú)效選項(xiàng)"); break;
            }
        }
    }

    static void ShowCurrentStatus()
    {
        if (string.IsNullOrEmpty(_currentCode))
        {
            Console.WriteLine("? 當(dāng)前沒有正在轉(zhuǎn)換的代碼。");
            return;
        }

        Console.WriteLine("\n?? 當(dāng)前轉(zhuǎn)換狀態(tài):");
        Console.WriteLine("--------------------------------------------------");
        Console.WriteLine(_currentCode.Length > 500 ? _currentCode.Substring(0, 500) + "..." : _currentCode);
        Console.WriteLine("--------------------------------------------------");
    }

    static void DisplayFinalResult()
    {
        Console.WriteLine("\n? 遷移完成!以下是轉(zhuǎn)換后的 PostgreSQL 函數(shù)代碼:");
        Console.WriteLine("--------------------------------------------------");
        Console.WriteLine(_currentCode);
        Console.WriteLine("--------------------------------------------------");
        
        Console.WriteLine("\n?? 遷移建議與注意事項(xiàng):");
        Console.WriteLine("  - ?? 請(qǐng)驗(yàn)證所有數(shù)據(jù)類型映射是否正確");
        Console.WriteLine("  - ??  檢查所有變量聲明和作用域");
        Console.WriteLine("  - ?? 驗(yàn)證游標(biāo)操作和異常處理邏輯");
        Console.WriteLine("  - ?? 可能需要手動(dòng)調(diào)整復(fù)雜的控制流結(jié)構(gòu)");
        Console.WriteLine("  - ???  臨時(shí)表用法可能需要進(jìn)一步調(diào)整");
        Console.WriteLine("  - ?? 建議在測(cè)試環(huán)境中驗(yàn)證函數(shù)邏輯");
        
        Console.Write("\n?? 是否將結(jié)果保存到文件?(y/N): ");
        if (Console.ReadLine()?.ToLower() == "y")
        {
            SaveToFile();
        }
    }

    static void SaveToFile()
    {
        try
        {
            string fileName = $"postgres_migration_{DateTime.Now:yyyyMMdd_HHmmss}.sql";
            System.IO.File.WriteAllText(fileName, _currentCode);
            Console.WriteLine($"? 已保存到: {fileName}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"? 保存文件時(shí)出錯(cuò): {ex.Message}");
        }
    }

    /// -------------------------------
    /// ?? 輔助方法:多行輸入
    /// -------------------------------
    static string ReadMultilineInput()
    {
        StringBuilder sb = new StringBuilder();
        string line;
        Console.WriteLine("請(qǐng)輸入代碼(空行結(jié)束):");
        while (!string.IsNullOrWhiteSpace(line = Console.ReadLine()))
        {
            sb.AppendLine(line);
        }
        return sb.ToString();
    }

    /// -------------------------------
    /// ? 第1步:存儲(chǔ)過程結(jié)構(gòu)轉(zhuǎn)換
    /// CREATE PROCEDURE → CREATE FUNCTION
    /// -------------------------------
    static string ConvertProcedureToFunction(string input)
    {
        Console.WriteLine("[1/10] 正在轉(zhuǎn)換存儲(chǔ)過程結(jié)構(gòu) → 函數(shù)結(jié)構(gòu)...");
        
        string result = input;
        
        // 更精確的過程到函數(shù)轉(zhuǎn)換
        result = Regex.Replace(
            result,
            @"CREATE\s+(?:DEFINER\s*=\s*\w+@\w+\s+)?PROCEDURE\s+([^\s(]+)\s*\(([^)]*)\)",
            match =>
            {
                string procedureName = match.Groups[1].Value;
                string parameters = match.Groups[2].Value;
                
                // 處理參數(shù)中的OUT/INOUT類型
                string postgresParams = Regex.Replace(parameters, 
                    @"(OUT|INOUT)\s+(\w+)\s+(\w+)", 
                    "$2 INOUT $3");
                
                return $"CREATE OR REPLACE FUNCTION {procedureName}({postgresParams}) RETURNS void AS $$";
            }, 
            RegexOptions.IgnoreCase
        );

        // 添加函數(shù)語(yǔ)言聲明
        if (!result.Contains("AS $$"))
        {
            result = result.Replace("CREATE OR REPLACE FUNCTION", "CREATE OR REPLACE FUNCTION") + " RETURNS void AS $$";
        }

        // 處理BEGIN/END
        result = Regex.Replace(result, @"BEGIN\s*$", "BEGIN\n  -- ? 原 MySQL 存儲(chǔ)過程邏輯", RegexOptions.Multiline);
        result = Regex.Replace(result, @"END\s*;?\s*$", "END;\n$$ LANGUAGE plpgsql;", RegexOptions.Multiline);

        return result;
    }

    /// -------------------------------
    /// ? 第2步:數(shù)據(jù)類型映射
    /// 更完整的數(shù)據(jù)類型映射
    /// -------------------------------
    static string ConvertDataTypes(string input)
    {
        Console.WriteLine("[2/10] 正在轉(zhuǎn)換數(shù)據(jù)類型...");
        
        var typeMappings = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
        {
            { @"INT\b", "INTEGER" },
            { @"TINYINT\s*\(\s*1\s*\)", "BOOLEAN" },
            { @"TINYINT\b", "SMALLINT" },
            { @"SMALLINT\b", "SMALLINT" },
            { @"MEDIUMINT\b", "INTEGER" },
            { @"BIGINT\b", "BIGINT" },
            { @"DATETIME\b", "TIMESTAMP" },
            { @"TIMESTAMP\b", "TIMESTAMP" },
            { @"YEAR\b", "INTEGER" },
            { @"MEDIUMTEXT\b", "TEXT" },
            { @"LONGTEXT\b", "TEXT" },
            { @"MEDIUMBLOB\b", "BYTEA" },
            { @"LONGBLOB\b", "BYTEA" },
            { @"DOUBLE\b", "DOUBLE PRECISION" },
            { @"UNSIGNED\s+", "" }, // 移除UNSIGNED修飾符
            { @"AUTO_INCREMENT", "GENERATED BY DEFAULT AS IDENTITY" }
        };

        string result = input;
        foreach (var mapping in typeMappings)
        {
            result = Regex.Replace(result, mapping.Key, mapping.Value, RegexOptions.IgnoreCase);
        }

        return result;
    }

    /// -------------------------------
    /// ? 第3步:變量聲明轉(zhuǎn)換
    /// 更精確的變量聲明處理
    /// -------------------------------
    static string ConvertVariables(string input)
    {
        Console.WriteLine("[3/10] 正在轉(zhuǎn)換變量聲明...");
        string result = input;

        // 處理DECLARE語(yǔ)句 - 移動(dòng)到函數(shù)開頭或在適當(dāng)位置
        result = Regex.Replace(result, 
            @"DECLARE\s+(\w+)\s+(\w+(?:\s*\(\s*\d+(?:\s*,\s*\d+)*\s*\))?)\s*(?:DEFAULT\s*(.*?))?(?=;|$)",
            "  $1 $2" + (@" DEFAULT $3" != " DEFAULT " ? @" DEFAULT $3" : ""),
            RegexOptions.IgnoreCase | RegexOptions.Multiline);

        // 處理用戶變量 @var
        result = Regex.Replace(result, 
            @"@(\w+)", 
            "v_$1", 
            RegexOptions.IgnoreCase);

        return result;
    }

    /// -------------------------------
    /// ? 第4步:控制流轉(zhuǎn)換
    /// 更完整的控制流處理
    /// -------------------------------
    static string ConvertControlFlow(string input)
    {
        Console.WriteLine("[4/10] 正在轉(zhuǎn)換控制流語(yǔ)句...");
        string result = input;

        // LEAVE → EXIT
        result = Regex.Replace(result, 
            @"LEAVE\s+(\w+)", 
            "EXIT $1 WHEN TRUE", 
            RegexOptions.IgnoreCase);

        // ITERATE → CONTINUE
        result = Regex.Replace(result, 
            @"ITERATE\s+(\w+)", 
            "CONTINUE $1", 
            RegexOptions.IgnoreCase);

        // MySQL IF語(yǔ)句轉(zhuǎn)換
        result = Regex.Replace(result,
            @"IF\s+(.*?)\s+THEN\s+(.*?)(?=ELSEIF|ELSE|END\s+IF)",
            "IF $1 THEN\n    $2",
            RegexOptions.IgnoreCase | RegexOptions.Singleline);

        return result;
    }

    /// -------------------------------
    /// ? 第5步:游標(biāo)轉(zhuǎn)換
    /// 更精確的游標(biāo)處理
    /// -------------------------------
    static string ConvertCursors(string input)
    {
        Console.WriteLine("[5/10] 正在轉(zhuǎn)換游標(biāo)操作...");
        string result = input;

        // DECLARE CURSOR 轉(zhuǎn)換
        result = Regex.Replace(result,
            @"DECLARE\s+(\w+)\s+CURSOR\s+FOR\s+(.*?)(?=;|$)",
            "  $1 CURSOR FOR $2",
            RegexOptions.IgnoreCase | RegexOptions.Singleline);

        // FETCH 語(yǔ)句轉(zhuǎn)換
        result = Regex.Replace(result,
            @"FETCH\s+(\w+)\s+INTO\s+(.*?)",
            "FETCH $1 INTO $2",
            RegexOptions.IgnoreCase);

        return result;
    }

    /// -------------------------------
    /// ? 第6步:異常處理轉(zhuǎn)換
    /// DECLARE HANDLER → EXCEPTION WHEN
    /// -------------------------------
    static string ConvertExceptionHandlers(string input)
    {
        Console.WriteLine("[6/10] 正在轉(zhuǎn)換異常處理...");
        string result = input;

        // 簡(jiǎn)單的異常處理轉(zhuǎn)換
        result = Regex.Replace(result,
            @"DECLARE\s+(?:CONTINUE|EXIT)\s+HANDLER\s+FOR\s+(.*?)\s+(.*?)",
            "-- ?? 原MySQL異常處理: DECLARE HANDLER FOR $1 $2\n  -- 請(qǐng)?jiān)赑ostgreSQL中使用: EXCEPTION WHEN $1 THEN ...",
            RegexOptions.IgnoreCase | RegexOptions.Singleline);

        return result;
    }

    /// -------------------------------
    /// ? 第7步:事務(wù)控制轉(zhuǎn)換
    /// START TRANSACTION → BEGIN
    /// -------------------------------
    static string ConvertTransactions(string input)
    {
        Console.WriteLine("[7/10] 正在轉(zhuǎn)換事務(wù)控制...");
        string result = input;

        result = Regex.Replace(result, 
            @"START\s+TRANSACTION", 
            "BEGIN", 
            RegexOptions.IgnoreCase);

        return result;
    }

    /// -------------------------------
    /// ? 第8步:DML 與查詢語(yǔ)句轉(zhuǎn)換
    /// 更完整的函數(shù)和語(yǔ)法轉(zhuǎn)換
    /// -------------------------------
    static string ConvertDmlAndQueries(string input)
    {
        Console.WriteLine("[8/10] 正在轉(zhuǎn)換 DML 與查詢語(yǔ)句...");
        string result = input;

        // 函數(shù)轉(zhuǎn)換
        var functionMappings = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
        {
            { @"IFNULL\s*\(\s*(.*?)\s*,\s*(.*?)\s*\)", "COALESCE($1, $2)" },
            { @"NOW\s*\(\s*\)", "CURRENT_TIMESTAMP" },
            { @"CURDATE\s*\(\s*\)", "CURRENT_DATE" },
            { @"CURTIME\s*\(\s*\)", "CURRENT_TIME" },
            { @"GROUP_CONCAT\s*\(\s*(.*?)\s*\)", "STRING_AGG($1, ',')" },
            { @"LIMIT\s+(\d+)\s*,\s*(\d+)", "LIMIT $2 OFFSET $1" }
        };

        foreach (var mapping in functionMappings)
        {
            result = Regex.Replace(result, mapping.Key, mapping.Value, RegexOptions.IgnoreCase);
        }

        // SELECT INTO 處理
        result = Regex.Replace(result,
            @"SELECT\s+(.*?)\s+INTO\s+(.*?)\s+FROM",
            "SELECT $1 INTO $2 FROM",
            RegexOptions.IgnoreCase);

        return result;
    }

    /// -------------------------------
    /// ? 第9步:臨時(shí)表與表變量
    /// 臨時(shí)表處理
    /// -------------------------------
    static string ConvertTempTablesAndVars(string input)
    {
        Console.WriteLine("[9/10] 正在轉(zhuǎn)換臨時(shí)表與表變量...");
        string result = input;

        result = Regex.Replace(result,
            @"CREATE\s+TEMPORARY\s+TABLE",
            "CREATE TEMP TABLE",
            RegexOptions.IgnoreCase);

        return result;
    }

    /// -------------------------------
    /// ? 第10步:函數(shù)調(diào)用與集成
    /// CALL → SELECT,OUT 參數(shù)處理
    /// -------------------------------
    static string ConvertFunctionCalls(string input)
    {
        Console.WriteLine("[10/10] 正在轉(zhuǎn)換函數(shù)調(diào)用與集成...");
        string result = input;

        // CALL 語(yǔ)句轉(zhuǎn)換
        result = Regex.Replace(result,
            @"CALL\s+(\w+)\s*\((.*?)\)",
            "SELECT $1($2)",
            RegexOptions.IgnoreCase);

        return result;
    }
}

主要改進(jìn)和新增功能:

1.增強(qiáng)的用戶交互

  • 添加了逐步遷移功能
  • 實(shí)時(shí)查看轉(zhuǎn)換狀態(tài)
  • 結(jié)果保存到文件功能

2.更精確的轉(zhuǎn)換邏輯

  • 數(shù)據(jù)類型映射:使用字典管理,支持更多MySQL到PostgreSQL類型映射
  • 變量聲明:正確處理DEFAULT值和用戶變量(@var)
  • 控制流:更精確的LEAVE/ITERATE轉(zhuǎn)換
  • 函數(shù)轉(zhuǎn)換:支持更多MySQL內(nèi)置函數(shù)到PostgreSQL的映射

3.更好的錯(cuò)誤處理

  • 輸入驗(yàn)證
  • 文件保存錯(cuò)誤處理
  • 更友好的用戶提示

4.實(shí)際可用的轉(zhuǎn)換

  • 正確處理存儲(chǔ)過程參數(shù)(IN/OUT/INOUT)
  • 添加必要的PostgreSQL函數(shù)聲明(LANGUAGE plpgsql)
  • 更準(zhǔn)確的語(yǔ)法轉(zhuǎn)換

5.使用建議

# 創(chuàng)建和運(yùn)行項(xiàng)目
dotnet new console -n MySQLToPostgreSQLMigrator
cd MySQLToPostgreSQLMigrator
# 替換Program.cs內(nèi)容后運(yùn)行
dotnet run

到此這篇關(guān)于C#實(shí)現(xiàn)將MySQL的存儲(chǔ)過程轉(zhuǎn)換為PostgreSQL的文章就介紹到這了,更多相關(guān)C# MySQL存儲(chǔ)過程轉(zhuǎn)為PostgreSQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#中閉包概念講解

    C#中閉包概念講解

    這篇文章主要介紹了C#中閉包概念講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C#簡(jiǎn)單數(shù)字圖像處理程序

    C#簡(jiǎn)單數(shù)字圖像處理程序

    這篇文章主要為大家詳細(xì)介紹了C#簡(jiǎn)單數(shù)字圖像處理程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • c#英文單詞分類統(tǒng)計(jì)示例分享

    c#英文單詞分類統(tǒng)計(jì)示例分享

    本文給出的題目是給出一段英文,對(duì)其分類統(tǒng)計(jì)出英文單詞的個(gè)數(shù)如:長(zhǎng)度為4的單詞有2個(gè),長(zhǎng)度為3的有1個(gè),下面是題目答案
    2014-03-03
  • C#實(shí)現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復(fù)原窗體的方法

    C#實(shí)現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復(fù)原窗體的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)主窗體最小化后出現(xiàn)懸浮框及雙擊懸浮框恢復(fù)原窗體的方法,涉及C#窗體及鼠標(biāo)事件響應(yīng)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • c#中LINQ的基本用法(一)

    c#中LINQ的基本用法(一)

    這篇文章介紹了c#中LINQ的基本用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • c#遠(yuǎn)程html數(shù)據(jù)抓取實(shí)例分享

    c#遠(yuǎn)程html數(shù)據(jù)抓取實(shí)例分享

    這篇文章主要介紹了c#遠(yuǎn)程html數(shù)據(jù)抓取的方法,大家參考使用吧
    2013-12-12
  • C#中POST接口formdata傳參模板的記錄

    C#中POST接口formdata傳參模板的記錄

    這篇文章主要介紹了C#中POST接口formdata傳參模板的記錄方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Unity多語(yǔ)言轉(zhuǎn)換工具的實(shí)現(xiàn)

    Unity多語(yǔ)言轉(zhuǎn)換工具的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Unity多語(yǔ)言轉(zhuǎn)換工具的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C# 定時(shí)器保活機(jī)制引起的內(nèi)存泄露問題解決

    C# 定時(shí)器?;顧C(jī)制引起的內(nèi)存泄露問題解決

    這篇文章主要介紹了C# 定時(shí)器保活機(jī)制引起的內(nèi)存泄露問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 下載軟件后使用c#獲取文件的md5碼示例

    下載軟件后使用c#獲取文件的md5碼示例

    這篇文章主要介紹了下載軟件后使用c#獲取文件的md5碼示例,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

扶风县| 济阳县| 神农架林区| 个旧市| 罗山县| 合山市| 嘉祥县| 绵竹市| 精河县| 南昌市| 青冈县| 莎车县| 合作市| 密云县| 南开区| 长丰县| 海林市| 安泽县| 淅川县| 历史| 柞水县| 佛山市| 满洲里市| 申扎县| 荔波县| 房山区| 周口市| 海阳市| 图木舒克市| 固始县| 新邵县| 顺平县| 闽清县| 德兴市| 东阳市| 珲春市| 长兴县| 长岭县| 本溪| 渭南市| 布尔津县|