C#读取.sql文件并执行文件中的sql脚本

有些时候我们需要在程序中编写读取sql脚本文件并执行这些sql语句,但是我们在有些时候会遇到读出来的sql语句不能执行,其实不能执行并不是你的sql脚本文件有错误,而是去执行sql语句的时候,C#代码里面执行sql语句的代码对sql里面的一些标志字符不识别罢了,

  不能有Go标识符,还有不能执行创建视图的语句,如果有上述语句C#代码执行sql语句的时候就会出错,只要过滤掉“GO“等标志字符

        // 读取文本文件public static ArrayList ReadSqlFile(string filePath){ArrayList alSql = new ArrayList();try{if (!File.Exists(filePath)){return null;}StreamReader sr = File.OpenText(filePath);string commandText = string.Empty;string varLine = string.Empty;while (sr.Peek() > -1){varLine = sr.ReadLine();if (varLine == string.Empty){continue;}if (varLine != "GO" || varLine != "go" || varLine.Substring(0, 2) != "--" || varLine.Substring(0, 2) != @"/*" || varLine.Substring(0, 2) != @"*/"){commandText += varLine;//commandText += "/r/n";}else{alSql.Add(commandText);commandText = string.Empty;}}alSql.Add(commandText);commandText = string.Empty;sr.Close();return alSql;}catch (Exception ex){Logger.Instance.DoSomesting = "【业务模块-文件读写】";Logger.Instance.Info($"读取文件(.sql)异常:{ex.Message}");return alSql;}}

调用执行(此处执行方法我用封装类方法,后面给一个直接执行方法参考)

  ArrayList commandTextArrayList = null;string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);// 获取桌面路径OpenFileDialog openFileDialog = new OpenFileDialog();     //以打开的方式openFileDialog.Multiselect = false;                       //该值确定是否可以选择多个文件openFileDialog.Title = "请选择文件";                       //标题openFileDialog.InitialDirectory = desktopPath;//@"C:\";                 //默认打开C:\路径(可更改)//限制只显示文件夹及后缀为sql的文件(可根据需求更改)openFileDialog.Filter = "SQL文件(*.sql)|*.sql";string sqlFileName = "";if (openFileDialog.ShowDialog() == DialogResult.OK){sqlFileName = openFileDialog.FileName;commandTextArrayList = FileRWUtil.ReadSqlFile(sqlFileName); //调用ExecuteSqlFile()方法,反回 ArrayList对象;isSucess = bllDatabase.ExecuteSQLFile(commandTextArrayList);}

private static void ExecuteCommand(ArrayList varSqlList){MyConnection.Open();SqlTransaction varTrans = MyConnection.BeginTransaction();SqlCommand command = new SqlCommand();command.Connection = MyConnection;command.Transaction = varTrans;try{   foreach(string varcommandText in varSqlList){command.CommandText = varcommandText;command.ExecuteNonQuery();}varTrans.Commit();}catch(Exception ex){varTrans.Rollback();throw ex;}finally{MyConnection.Close();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/16576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码与人工智能:改变软件开发的未来

引言 在当今快速发展的科技时代,软件开发行业也在不断地创新和演进。其中,低代码开发和人工智能技术是两个备受关注的领域,低代码开发通过简化开发流程和降低编码难度,使得软件开发变得更加高效和便捷,而人工智能技术…

正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章

在数字化强国的主旋律之下,政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下,正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验,成为了政府信息化建设的杰出代表。甘肃省人大代表履职…

基于 Wireshark 分析 TCP 协议

一、TCP 协议 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色,用于保证数据的可靠传输。 TCP协议的特点如下: 1. 面向连接:在通信前需要先建立连接&#x…

Hunyuan-DiT环境搭建推理测试

引子 最近鹅厂竟然开源了一个多模态的大模型,之前分享福报厂的多模态视觉大模型(Qwen-VL环境搭建&推理测试-CSDN博客)感兴趣的可以移步。鹅厂开源的,我还是头一回部署。好的,那就让我们看看这个多模态视觉大模型有…

强化学习,第 3 部分:蒙特卡罗方法

文章目录 一、介绍二、关于此文章三、无模型方法与基于模型的方法四、V函数估计4.1 基本概念4.2 V-功能 五、Q 函数估计5.1 V函数概念5.2 优势5.3 Q函数 六、勘探与勘探的权衡七、结论 一、介绍 从赌场到人工智能:揭示蒙特卡罗方法在复杂环境中的强大功能    强化…

zstd库数据压缩与解压缩

在 Visual Studio 2019 中使用 C 的 zstd 库进行数据压缩与解压缩 在今天的博客中,我们将探讨如何在 Visual Studio 2019 中使用 zstd 库进行高效的数据压缩和解压缩。zstd(也称为 Zstandard 或 zstd)是由 Facebook 开发的开源压缩库&#x…

动手学深度学习22 池化层

动手学深度学习22 池化层 1. 池化层2. 实现3. QA 课本: https://zh-v2.d2l.ai/chapter_convolutional-neural-networks/pooling.html 视频: https://www.bilibili.com/video/BV1EV411j7nX/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f0…

关于单元测试

关于单元测试的一些总结:

【408真题】2009-17

“接”是针对题目进行必要的分析,比较简略; “化”是对题目中所涉及到的知识点进行详细解释; “发”是对此题型的解题套路总结,并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材(2025版&…

618值得买的东西有哪些?买什么最划算?超全品类大清单总结

平日里让许多人心动不已的收藏加购好物,是否常常因为价格昂贵而让人望而却步?然而,618活动期间的到来,恰恰为我们提供了一个难得的购物盛宴!相信在第一波活动中,许多消费者已经跃跃欲试,开始享受…

SuperSocket 自定义AppServer、AppSession、CommandBase

1、预期效果如下图。 2、自定义AppServer,代码如下。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Config;namespace Co…

做抖音电商,可以没有货源和经验,但不能没有耐心

我是王路飞。 在抖音做电商这件事,不需要怀疑其可行性。 经过四五年的发展,平台和商家已经证明了抖音电商的前景,它就是我们普通人做抖音最适合的一个渠道。 想在抖音做电商的,再给你们一个经验之谈,你可以没有货源…

基于 Spring Boot 博客系统开发(十一)

基于 Spring Boot 博客系统开发(十一) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(十)&#x…

云上聚智——移动云云服务器进行后端的搭建及部署

什么是移动云 移动云是指将移动设备和云计算技术相结合,为移动应用提供强大的计算和存储能力的服务模式。传统的移动应用通常在本地设备上进行计算和存储,而移动云将这些任务转移到云端进行处理。通过移动云,移动设备可以利用云端的高性能计算…

基于Python+flask+echarts的气象数据采集与分析系统,可实现lstm算法进行预测

背景 基于PythonFlaskEcharts的气象数据采集与分析系统结合了强大的数据处理能力和可视化展示技术,旨在实现对气象数据的实时采集、存储和分析。通过Python编程语言实现数据采集模块,利用Flask框架搭建后端系统,实现数据处理、存储和分析功能…

ORB-SLAM2从理论到代码实现(六):Tracking程序详解(上)

1. Tracking框架 Tracking线程流程框图: 各流程对应的主要函数 2. Tracking整体流程图 上面这张图把Tracking.cc讲的特别明白。 tracking线程在获取图像数据后,会传给函数GrabImageStereo、GrabImageRGBD或GrabImageMonocular进行预处理,这…

【php开发系统性学习】——thinkphp框架的控制器和视图的精简详细的使用

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

[Android]联系人-删除修改

界面显示 添加按钮点击,holder.imgDelete.setlog();具体代码 public MyViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {//映射布局文件,生成相应的组件View v LayoutInflater.from(parent.getContext()).inflate(R.layout.d…

胶原蛋白三肽能否深入皮肤?一场关于美丽的科学之旅

在追求美丽的道路上,我们总是对各种护肤成分充满好奇。今天,就让我们一起探讨一个热门话题——胶原蛋白三肽,它究竟能否深入我们的皮肤,为我们带来期待中的美丽改变呢? 首先,我们需要了解胶原蛋白肽是什么…