0

0

Dapper如何执行一个SQL脚本文件 Dapper运行.sql文件内容

星降

星降

发布时间:2026-01-06 10:47:05

|

725人浏览过

|

来源于php中文网

原创

Dapper不直接支持执行SQL脚本文件,需先读取文件内容为字符串,再按GO分隔符分割语句,最后逐条调用Execute在事务中执行。

dapper如何执行一个sql脚本文件 dapper运行.sql文件内容

Dapper 本身不直接支持执行 SQL 脚本文件(如 .sql 文件),它只是一个轻量级的 ORM,只负责将 SQL 字符串映射到对象或执行单条/批量命令。要运行一个完整的 SQL 脚本文件(比如包含多条语句、GO 分隔、注释、条件逻辑等),你需要先读取文件内容,再手动解析并分段执行。

读取 .sql 文件内容

最基础的一步是把 SQL 脚本加载为字符串:

  • 使用 File.ReadAllText("script.sql") 或异步版本 File.ReadAllTextAsync
  • 确保文件编码正确(推荐 UTF-8,尤其含中文或特殊字符时)
  • 路径建议用绝对路径或基于 AppContext.BaseDirectory 构建相对路径

分割多条 SQL 语句(处理 GO 分隔符)

SQL Server 的 GO 不是 T-SQL 语句,而是客户端工具(如 SSMS)识别的批处理分隔符。Dapper 不认识 GO,必须手动切分:

  • 按行拆分,跳过空行和注释行(--/*...*/ 需简单过滤)
  • 遇到独立一行的 GO(忽略前后空格)就作为语句边界
  • 推荐用现成小工具,比如 SqlCeToolboxSqlScript 类,或轻量解析器如 Microsoft.Data.SqlClient.Scripts(.NET 6+)
  • 简单场景下可用正则:Regex.Split(content, @"^\s*GO\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline)

用 Dapper 执行每条语句

拿到语句数组后,逐条传给 Dapper 执行(注意:不能用 Query/QuerySingle,要用 Execute):

创一AI
创一AI

AI帮你写短视频脚本

下载
  • connection.Execute(sqlStatement, transaction: trans) —— 推荐在事务中执行,保证原子性
  • 跳过空字符串和纯注释语句(避免抛异常)
  • 对 CREATE/ALTER/DROP 等 DDL 语句,SQL Server 允许在同一连接中执行,无需特别处理
  • 如果脚本含临时表或会话级设置(如 SET ANSI_NULLS ON),需确保都在同一连接+同一事务中执行

完整示例(简化版)

以下是一个最小可行示例(无复杂注释处理,仅支持 GO 分割):

var script = File.ReadAllText("init.sql");
var statements = Regex.Split(script, @"^\s*GO\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline);
using var conn = new SqlConnection(connStr);
conn.Open();
using var trans = conn.BeginTransaction();
try
{
    foreach (var stmt in statements.Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)))
    {
        conn.Execute(stmt, transaction: trans);
    }
    trans.Commit();
}
catch
{
    trans.Rollback();
    throw;
}

基本上就这些。Dapper 不做脚本解析,但配合基础 IO 和简单文本处理,完全能胜任 SQL 脚本部署任务。关键点是:读得准、切得对、执行稳(加事务)、错得清(有回滚)。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1092

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

356

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

674

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

412

2024.04.29

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号