当前位置: 首页 > news >正文

SQL语句内容处理——给每行内容都添加单引号和逗号

一、需求描述

        当我们在日常开发或者运维过程中,会遇到业务人员提出给她们查询大量编号对应的数据内容,此时我们需要在SQL语句里面使用in函数包含这些需要查询的编号,此时就需要给每个编号的收尾添加单引号和逗号才能够查询,如果手工给这些编号添加那么效率太低了,且容易出错;具体需求如下:

二、需求分析

        现有大量的编号需要给每个编号的收尾添加单引号和逗号,方便在执行sql语句查询。

三、编写工具实现

 3.1、实现功能

《1》可以使用快捷键Ctrl+C复制内容然后在工具这里按下Ctrl+V粘贴内容;或者直接点击鼠标右键粘贴内容【使用.NET5.0框架开发】;

《2》可以选用2种方法给每行内容添加单引号和逗号;

《3》可以选择是否需要给每行内容的收尾空格剔除,然后在收尾添加单引号和逗号;

《4》可以直接清空剪贴板的内容;

《5》一键复制所有处理好的内容;

 3.2、实现该工具功能的一些核心技术

1、获取剪贴板内容并让鼠标光标移动到最后

        /// <summary>/// 获取剪贴板的文本数据/// </summary>/// <param name="textBox">需要显示粘贴板数据的TextBox控件</param>private void GetClipboardTextDatas(TextBox textBox){if (Clipboard.ContainsText()){textBox.Text = Clipboard.GetText();让光标显示在内容最后//textBox_Datas1.SelectionStart= textBox_Datas1.Text.Length;//光标定位到文本最后textBox.Select(textBox.TextLength, 0);//滚动到光标处textBox.ScrollToCaret();}}

 2、实现拦截默认快捷键的事件,单独编写快捷键内容

        //自定义事件委托方法private delegate void TextBoxPaste(bool use);//声明委托方法private TextBoxPaste textBoxPaste;private const Keys CopyKeys = Keys.Control | Keys.C;private const Keys PasteKeys = Keys.Control | Keys.V;protected override bool ProcessCmdKey(ref Message msg, Keys keyData){if ((keyData == CopyKeys) || (keyData == PasteKeys)){int keyNum = msg.WParam.ToInt32();//keyNum=86是Ctrl+V的数字if (keyNum == 86){//使用委托方法textBoxPaste(true);}return true;}else{return base.ProcessCmdKey(ref msg, keyData);}}private void textBox_Datas1_KeyDown(object sender, KeyEventArgs e){禁用默认的Ctrl+V粘贴//textBox_Datas1.ShortcutsEnabled = false;同时按下Ctrl+V粘贴数据到Text控件中//if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)//{//    isCopyClipboard = false;//    GetClipboardTextDatas(textBox_Datas1);//}//注册委托方法textBoxPaste += textBox_Datas1_KeyDown;}//定义委托方法private void textBox_Datas1_KeyDown(bool use){if (use){GetClipboardTextDatas(textBox_Datas1);isCopyClipboard = false;}}

3、对TextBox文本控件内容进行处理添加首尾单引号和逗号方法

        /// <summary>/// 获取数据并添加前后单引号末尾添加逗号方法2/// </summary>/// <param name="OriginalDataTextBox">原始数据的TextBox控件</param>/// <param name="acceptTextBox">接收处理后数据的TextBox控件</param>/// <param name="isClearFirstAndLastSpace">是否去除每行内容的首尾空格</param>private void HandleDataMethod2(TextBox OriginalDataTextBox, TextBox acceptTextBox, bool isClearFirstAndLastSpace = false){StringBuilder sb = new StringBuilder();sb.Append(OriginalDataTextBox.Text);if (sb.ToString().Contains('\r')){acceptTextBox.Text = "";try{string[] strArray = sb.ToString().Split('\r');StringBuilder sb2 = new StringBuilder();int len = strArray.Length;for (int i = 0; i < len - 1; i++){string strTmp = strArray[i];if (strTmp.Contains('\n')){if (isClearFirstAndLastSpace){strTmp = strTmp.Replace('\n', ' ').Trim();}else{strTmp = strTmp.Split('\n')[1];}}string str = $"'{strTmp}'";if (i < len - 2){str += ",";}sb2.AppendLine(str);//System.Threading.Thread.Sleep(10);}acceptTextBox.Text = sb2.ToString();sb2.Clear();Array.Clear(strArray, 0, strArray.Length);}catch (Exception ex){throw new Exception(ex.Message);}finally{sb.Clear();}}else{MessageBox.Show("当前需处理的数据1不包含[\t]字符不用不符合处理规则,无法处理!!!", "错误提示",MessageBoxButtons.OK, MessageBoxIcon.Warning);}}
        /// <summary>/// 获取数据并添加前后单引号末尾添加逗号方法3/// </summary>/// <param name="OriginalDataTextBox">原始数据的TextBox控件</param>/// <param name="acceptTextBox">接收处理后数据的TextBox控件</param>/// <param name="isClearFirstAndLastSpace">是否去除每行内容的首尾空格</param>private void HandleDataMethod3(TextBox OriginalDataTextBox,TextBox acceptTextBox,bool isClearFirstAndLastSpace=false){if (!string.IsNullOrEmpty(OriginalDataTextBox.Text)){int len = OriginalDataTextBox.Lines.Length;string[] tmpArray = OriginalDataTextBox.Lines;StringBuilder sb = new StringBuilder();try{acceptTextBox.Text = "";string strTmp = "";string str = "";for (int i = 0; i < len - 1; i++){strTmp = tmpArray[i];if (isClearFirstAndLastSpace){strTmp = strTmp.Trim();}if (i == len - 2){str = $"'{strTmp}'";}else{str = $"'{strTmp}',";}sb.AppendLine(str);}acceptTextBox.Text = sb.ToString();}catch (Exception ex){throw new Exception(ex.Message);}finally{Array.Clear(tmpArray, 0, tmpArray.Length);sb?.Clear();}}else{MessageBox.Show("当前需处理的数据1不能为空,请检查后重试!", "错误提示",MessageBoxButtons.OK, MessageBoxIcon.Warning);}}

四、项目源码与相关资料

 该工具项目源码开源地址https://github.com/kafeiweimei/WinFormTool

Clipboard 类 (System.Windows) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.clipboard?view=windowsdesktop-8.0TextBox 类 (System.Windows.Forms) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.textbox?view=windowsdesktop-9.0Control.ProcessCmdKey(Message, Keys) 方法 (System.Windows.Forms) | Microsoft Learnhttps://learn.microsoft.com/zh-cn/dotnet/api/system.windows.forms.control.processcmdkey?view=windowsdesktop-7.0

http://www.xdnf.cn/news/675811.html

相关文章:

  • 理解vue-cli 中进行构建优化
  • 【Elasticsearch】`_refresh`和`_flush`的区别
  • vue3+vite+amfe-flexible+postcss-pxtorem 实现全分辨率自适应
  • AI工具的选择:Dify还是传统工具?
  • 【C++】封装哈希表实现 unordered_map、unordered_set
  • 【Harmony OS】组件自定义属性、事件和状态管理
  • 【Webtrees 手册】第 9 章 - 开发指南
  • Mobaxterm 连接到 Docker 容器
  • 查询端口占用情况的命令(windows、linux)
  • Flink Table API 编程实战详解
  • IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)
  • 数字人教师:开启教育智慧革新之旅
  • Unity数字人开发笔记
  • YOLOv4:目标检测的新标杆
  • 流量红利的破局之道—深度解析OPPO应用商店 CPD广告运营
  • 自动驾驶规划控制算法教程:从理论到实践
  • 《计算机组成原理》第 10 章 - 控制单元的设计
  • CST基础八-TOOLS工具栏(一)
  • 如何将 PDF 文件中的文本提取为 YAML(教程)
  • 自动化测试入门:解锁高效软件测试的密码
  • 59、【OS】【Nuttx】编码规范解读(七)
  • 【Python中的self】Python中的`self`:从基础到进阶的实战指南
  • roo code调用手搓mcp server
  • Python filter()函数详解:数据筛选的精密过滤器
  • 在promise中,多个then如何传值
  • sqli_labs第二十九/三十/三十一关——hpp注入
  • 《计算机组成原理》第 6 章 - 计算机的运算方法
  • 大模型的参数高效微调;大模型的对齐
  • Linux显示进程状态——ps命令详解与实战
  • 用C#最小二乘法拟合圆形,计算圆心和半径