跳到主要内容

数据库查询

对指定数据库执行 SQL,并按执行方式返回表格、对象列表、影响行数或单个值。需要具备数据库基础知识。本功能仍为预览状态,欢迎反馈问题。

当前模块定义

概述

支持 SQL Server、MySQL、SQLite、OleDB、ODBC。内部用 Dapper 执行查询。

更新、删除数据可能造成重大损失,请谨慎操作。

参数说明

数据库连接类型:SQL Server、MySQL、SQLite、OleDB、ODBC。

连接字符串:数据库的 ConnectionString。各类型写法不同,可参考 connectionstrings.com。Quicker 对下面两种情况做了补全:

  • SQLite:可以直接填数据库文件的完整路径,会自动补成 Data Source=SQLite数据库文件完整路径;Version=3;
  • OleDB 访问 Access(.mdb / .accdb):也可以直接填文件路径,会自动补成 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Access文件路径;Persist Security Info=False;

SQL语句:要执行的 SQL。语句里可用 @参数名 写参数,例如:

select * from contacts Where first_name = @FirstName

参数:仅在 SQL 里使用了参数时提供。写参数名时不要带前面的 @。支持:

  1. 词典变量,键为 SQL 里的参数名。
  2. 能转成词典的文本:
    • 简单格式:每行一个,参数名:参数值
    • JSON:{"文本参数名":"参数值","数字参数2":参数值2}
  3. C# DataRow 对象。
  4. 匿名对象:$= new { ParamName= value }

超时秒数:执行查询的超时时间。留空或 0 表示默认。

执行方式

  • Query:查询并返回结果数据:主要用于 SELECT,例如 SELECT * FROM Table1
  • Execute:执行并返回影响的行数:主要用于 INSERTUPDATEDELETE
  • ExecuteScalar:执行并返回单个值(首行首列的值):例如 SELECT COUNT(1) FROM Table1

各方式的输出见下面。

失败后停止:遇到异常时是否停止动作。默认开启。查询结果为空不一定会失败,请以实测为准。

Query:查询并返回结果数据

Execute:执行并返回影响的行数

ExecuteScalar:执行并返回单个值

输出

  • 是否成功:是否未出现异常。不代表一定有返回行,也不代表一定改到了数据。
  • 查询结果(表格):仅 Query。表格类型(DataTable)。可用 表格数据操作 查看或继续处理。
  • 查询结果(对象列表):仅 Query。动态对象列表,每行一个对象。
  • 首项结果:仅 Query。第一行,可输出到动态对象或词典。没有结果时为 null
  • 结果行数:仅 Query。
  • 影响行数:仅 Execute。创建、更新或删除的行数。
  • 单值结果:仅 ExecuteScalar。查询返回的单个值。

遍历数据行

需要 Quicker 1.28.10+。查询结果可以输出到表格,或输出到动态对象列表,再用 每个 循环。

  1. 对表格的每行循环,见 表格变量类型
  2. 对动态对象列表循环:

此时「项」应输出到动态对象变量。循环里用 {行对象}.列名 访问某一列。

限制与排障

  • 本功能仍为预览状态。更新、删除请先在测试库验证。
  • 结果为空通常不会触发失败;不要只靠 是否成功 判断有没有行。
  • SQL 参数名不要带 @。连接字符串写错时,先按下面的格式核对。
  • MySQL 使用 MySqlConnector,SQLite 使用 System.Data.SQLite

常见连接字符串

SQL Server

  • 标准:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
  • 连接到某个实例:Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;
  • 非标准端口:Server=myServerName,myPortNumber;Database=myDataBase;User Id=myUsername;Password=myPassword;

MySQL

Server=myserver;User ID=mylogin;Password=mypass;Database=mydatabase

创建 SQLite 数据库

可以用下面的子程序创建 SQLite 数据库,参数为数据库文件的完整路径。

示例动作

步骤较多,只保留分享卡片。

相关链接

更新于