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

C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼

 更新時(shí)間:2023年08月23日 10:32:05   作者:Csharp?小記  
這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)格式化SQL語(yǔ)句的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

前言

本來(lái)想自己去實(shí)現(xiàn)這個(gè)功能的,后來(lái)吧,經(jīng)過(guò)一番深思熟慮,我覺(jué)得還是太麻煩了。所以,打開(kāi)Github,搜索現(xiàn)成的輪子。。。

即便是在GIithub上,關(guān)于用c#來(lái)做這個(gè)功能的我也沒(méi)找到幾個(gè)(也可能是我搜索姿勢(shì)不太標(biāo)準(zhǔn))。

說(shuō)實(shí)話,里面的代碼我也沒(méi)有去研究,但大致就是把SQL語(yǔ)句經(jīng)過(guò)一系列分析后,轉(zhuǎn)換成HTM文件,然后用WebBrowser加載出來(lái)??雌饋?lái)還是比較簡(jiǎn)單的,但是作者寫(xiě)的比較復(fù)雜,使我喪失了仔細(xì)研讀的耐心。。。

不過(guò)基于上面這種思想的話,我倒是覺(jué)得大可不必非要找C#語(yǔ)言的了,也可以同步看下js的,反正最后是加載html,直接拿過(guò)來(lái)用可能也比較簡(jiǎn)單。

原作者的這個(gè)工具寫(xiě)的比較完善,v2版本用了dev控件做了美化,而且是實(shí)時(shí)(定時(shí))檢測(cè)sql語(yǔ)句進(jìn)行格式化。如下:

我就做的比較簡(jiǎn)單了,頁(yè)面還是仿照了原作者的布局,但是去掉了一些代碼,為了更簡(jiǎn)單的調(diào)用。。。

可以直接把BaiSqlFormatLib.dll拿來(lái)調(diào)用,或者集成源代碼到項(xiàng)目中。

實(shí)現(xiàn)功能

輸入SQL語(yǔ)句進(jìn)行格式化

開(kāi)發(fā)環(huán)境

開(kāi)發(fā)工具:Visual Studio 2013

.NET Framework版本:4.5

實(shí)現(xiàn)代碼

public Form1()
        {
            InitializeComponent();
            Init();
        }
        #region 初始化配置
        ISqlTokenizer _tokenizer;
        ISqlTokenParser _parser;
        ISqlTreeFormatter _formatter;
        public void Init()
        {
            chk_default.Checked = true;
            _tokenizer = new BaiSqlFormatLib.Tokenizers.TSqlStandardTokenizer();
            _parser = new BaiSqlFormatLib.Parsers.TSqlStandardParser();
        }
        #endregion
        #region 格式化
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.F6)
            {
                txt_format.DocumentText = Format(txt_sql.Text);
            }
        }
        private string Format(string inputSql)
        {
            SetFormatter();
            var tokenizedSql = _tokenizer.TokenizeSQL(inputSql, inputSql.Length);
            var parsedSql = _parser.ParseSQL(tokenizedSql);
            string subSqlHtml = _formatter.FormatSQLTree(parsedSql);
            return subSqlHtml;
        }
        /// <summary>
        /// 設(shè)置格式化屬性
        /// </summary>
        private void SetFormatter()
        {
            ISqlTreeFormatter innerFormatter = new BaiSqlFormatLib.Formatters.TSqlStandardFormatter(new BaiSqlFormatLib.Formatters.TSqlStandardFormatterOptions
            {
                IndentString = "\\s\\s\\s\\s", //縮進(jìn)內(nèi)容
                SpacesPerTab = 4,
                MaxLineWidth = Convert.ToInt32(txt_maxWidth.Text), //單行字符串最大長(zhǎng)度
                ExpandCommaLists = !chk_columnNotNewline.Checked,  //false 字段換行 
                KeywordAlign = chk_keywordAlign.Checked,     //字段對(duì)齊
                TrailingCommas = true,   //true 逗號(hào)在字段之后
                SpaceAfterExpandedComma = true,  //true 逗號(hào)后追加空格
                ExpandBooleanExpressions = chk_conditionNewline.Checked,  //true 條件換行
                ExpandCaseStatements = chk_expandCase.Checked,      //true case when換行
                ExpandBetweenConditions = chk_expandBetween.Checked,  //true between 換行
                ExpandInLists = chk_expandIn.Checked,   //true in 內(nèi)容換行
                BreakJoinOnSections = chk_expandOn.Checked, //true join on中on 條件換行
                UppercaseKeywords = chk_uppercaseKeywords.Checked, //true 關(guān)鍵字大寫(xiě)
                AllUpper = chk_allUpper.Checked, //true 全部大寫(xiě)
                HTMLColoring = chk_coloring.Checked, //true HTML顏色標(biāo)記 默認(rèn)為true
                KeywordStandardization = true,//true 關(guān)鍵字標(biāo)準(zhǔn)化
                NewStatementLineBreaks = 2, //新語(yǔ)句換行數(shù)
                NewClauseLineBreaks = 1,//遇到關(guān)鍵字 換行數(shù)
                AllIndent = chk_allIndent.Checked, //整體縮進(jìn)一個(gè)IndentString
                AsAlign = chk_asAlign.Checked, //true as對(duì)齊
                KeywordLengthOfAs = Convert.ToInt32(txt_asMaxWidth.Text)//as字段的最大長(zhǎng)度
            });
            _formatter = new BaiSqlFormatLib.Formatters.HtmlPageWrapper(innerFormatter);
        }
        #endregion
        #region 頁(yè)面配置
        private void chk_default_CheckedChanged(object sender, EventArgs e)
        {
            if (chk_default.Checked)
            {
                chk_custom.CheckState = CheckState.Unchecked;
                txt_maxWidth.Text = "170";
                chk_columnNotNewline.CheckState = CheckState.Unchecked;
                chk_keywordAlign.CheckState = CheckState.Checked;
                chk_conditionNewline.CheckState = CheckState.Checked;
                chk_expandCase.CheckState = CheckState.Checked;
                chk_expandBetween.CheckState = CheckState.Unchecked;
                chk_expandIn.CheckState = CheckState.Unchecked;
                chk_expandOn.CheckState = CheckState.Checked;
                chk_uppercaseKeywords.CheckState = CheckState.Unchecked;
                chk_allUpper.CheckState = CheckState.Unchecked;
                chk_coloring.CheckState = CheckState.Checked;
                chk_allIndent.CheckState = CheckState.Checked;
                chk_asAlign.CheckState = CheckState.Checked;
                txt_asMaxWidth.Text = "35";
                chk_addSemicolon.CheckState = CheckState.Checked;
                txt_maxWidth.Enabled = false;
                chk_columnNotNewline.Enabled = false;
                chk_keywordAlign.Enabled = false;
                chk_conditionNewline.Enabled = false;
                chk_expandCase.Enabled = false;
                chk_expandBetween.Enabled = false;
                chk_expandIn.Enabled = false;
                chk_expandOn.Enabled = false;
                chk_uppercaseKeywords.Enabled = false;
                chk_allUpper.Enabled = false;
                chk_coloring.Enabled = false;
                chk_allIndent.Enabled = false;
                chk_asAlign.Enabled = false;
                txt_asMaxWidth.Enabled = false;
                chk_addSemicolon.Enabled = false;
            }
            else
                chk_custom.CheckState = CheckState.Checked;
        }
        private void chk_custom_CheckedChanged(object sender, EventArgs e)
        {
            if (chk_custom.Checked)
            {
                chk_default.CheckState = CheckState.Unchecked;
                chk_columnNotNewline.Enabled = true;
                chk_keywordAlign.Enabled = true;
                chk_conditionNewline.Enabled = true;
                chk_expandCase.Enabled = true;
                chk_expandBetween.Enabled = true;
                chk_expandIn.Enabled = true;
                chk_expandOn.Enabled = true;
                chk_uppercaseKeywords.Enabled = true;
                chk_allUpper.Enabled = true;
                chk_coloring.Enabled = true;
                chk_allIndent.Enabled = true;
                chk_asAlign.Enabled = true;
                chk_addSemicolon.Enabled = true;
                txt_maxWidth.Enabled = true;
                txt_asMaxWidth.Enabled = true;
            }
            else
                chk_default.CheckState = CheckState.Checked;
        }
        #endregion

實(shí)現(xiàn)效果

到此這篇關(guān)于C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼的文章就介紹到這了,更多相關(guān)C#格式化SQL語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 帶著問(wèn)題讀CLR via C#(筆記一)CLR的執(zhí)行模型

    帶著問(wèn)題讀CLR via C#(筆記一)CLR的執(zhí)行模型

    CLR (Common Language Runtime) 是一個(gè)可以由多種編程語(yǔ)言使用的“運(yùn)行時(shí)”。
    2013-04-04
  • C#中File和FileStream的簡(jiǎn)單介紹和用法

    C#中File和FileStream的簡(jiǎn)單介紹和用法

    這篇文章主要給大家介紹了關(guān)于C#中File和FileStream用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#從XmlDocument提取完整字符串的方法

    C#從XmlDocument提取完整字符串的方法

    文章介紹了兩種生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`屬性,但輸出的XML字符串不帶格式,可讀性差,方法二利用`XmlWriterSettings`控制格式,并通過(guò)`MemoryStream`作為輸出流,可以自定義編碼,如UTF-8,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • Unity Undo實(shí)現(xiàn)原理和使用方法詳解

    Unity Undo實(shí)現(xiàn)原理和使用方法詳解

    本文將詳細(xì)介紹Unity Undo實(shí)現(xiàn)原理和使用方法,并提供多個(gè)使用例子,幫助開(kāi)發(fā)者更好地理解和應(yīng)用該功能,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 基于c#用Socket做一個(gè)局域網(wǎng)聊天工具

    基于c#用Socket做一個(gè)局域網(wǎng)聊天工具

    目前基于Internet的即時(shí)聊天工具已經(jīng)做的非常完美,本文介紹了基于c#用Socket做一個(gè)局域網(wǎng)聊天工具,有需要的朋友可以看一下。
    2016-10-10
  • 如何解決hash沖突

    如何解決hash沖突

    上篇文章 為什么哈希存取比較快?使用它需要付出什么代價(jià) 只是簡(jiǎn)單介紹了使用hash所帶來(lái)的利與弊。并未涉及hash的技術(shù)細(xì)節(jié),本文則著重學(xué)習(xí)一下如何解決哈希編址的沖突問(wèn)題。
    2016-06-06
  • 基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面

    基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面

    這篇文章主要為大家詳細(xì)介紹了如何基于C#設(shè)計(jì)一個(gè)帶導(dǎo)航菜單的主界面,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • 使用C#發(fā)送Http請(qǐng)求實(shí)現(xiàn)模擬登陸實(shí)例

    使用C#發(fā)送Http請(qǐng)求實(shí)現(xiàn)模擬登陸實(shí)例

    本文主要介紹了使用C#發(fā)送Http請(qǐng)求實(shí)現(xiàn)模擬登陸實(shí)例,模擬登陸的原理簡(jiǎn)單,想要了解的朋友可以了解一下。
    2016-10-10
  • C#計(jì)算程序執(zhí)行過(guò)程花費(fèi)時(shí)間的方法

    C#計(jì)算程序執(zhí)行過(guò)程花費(fèi)時(shí)間的方法

    這篇文章主要介紹了C#計(jì)算程序執(zhí)行過(guò)程花費(fèi)時(shí)間的方法,涉及C#簡(jiǎn)單的時(shí)間運(yùn)算技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • 用C#將圖片保存至Oracle BLOB字段中的方法

    用C#將圖片保存至Oracle BLOB字段中的方法

    這篇文章主要介紹了用C#將圖片保存至Oracle BLOB字段中的方法, 依靠ImageViewer庫(kù)進(jìn)行操作,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

兖州市| 科技| 金阳县| 灵璧县| 台江县| 博客| 岚皋县| 海门市| 平阴县| 平昌县| 南部县| 若尔盖县| 合江县| 潮安县| 海盐县| 多伦县| 托里县| 巧家县| 古蔺县| 遂昌县| 家居| 富宁县| 乐清市| 收藏| 万州区| 万安县| 楚雄市| 灯塔市| 南丹县| 屏山县| 晋中市| 长垣县| 怀柔区| 大余县| 盐亭县| 疏勒县| 石棉县| 永寿县| 新密市| 卓尼县| 蓬安县|