# 数据库查询 【本功能为预览状态,欢迎反馈问题】
​ 对指定的数据库执行SQL查询并返回结果。 - 支持的数据库连接类型包含:SQLServer、MySQL、SQLite、OleDb、ODBC。 - 您需要了解数据库相关知识才能使用本模块。 - 本模块内部使用[Dapper](https://github.com/DapperLib/Dapper)执行查询。 - 更新、删除数据可能会造成重大损失,请谨慎操作。 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640053285097-8c3cea73-37e9-4722-9802-39c4f2c7b9d2.png#clientId=u474556c4-1c41-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=676&id=u7731e39f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1351&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=112372&status=done&style=none&taskId=u0d4d5660-c72a-41f7-a574-67728d49162&title=&width=628.5)
# 步骤参数 ​ **【数据库连接类型】**
选择所要访问的数据库连接类型。
​ **【连接字符串】**
指定数据库连接字符串(ConnectionString)。每种数据库有自己的格式规范,您可以参考[https://www.connectionstrings.com/](https://www.connectionstrings.com/) 网站了解对应数据库连接字符串的写法。
​ 为了方便您的使用,Quicker对以下情况做了特殊处理: - 对SQLite数据库,可以直接指定SQLite数据库文件的完整路径。Quicker会自动补全连接字符串,格式为:`Data Source=SQLite数据库文件完整路径;Version=3; ` - 在使用OleDb类型时,对于Access文件(扩展名为`.mdb`或`.accdb`)也可以直接指定文件路径。Quicker会自动补全连接字符串,格式为:`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 }`
​ ​ **【超时秒数】**
执行查询的超时时间。
​ **【执行方式】**
(1)Query:查询并返回结果数据。主要用于使用SELECT语句获取行数据,例如:`SELECT * FROM Table1`
(2)Execute:执行并返回影响的行数。主要用于INSERT、UPDATE、DELETE等语句更新数据的情况。
(3)ExecuteScalar:执行并返回单值结果。例如:`SELECT COUNT(1) FROM Table1`
各执行方式的输出值信息请参考下面的章节。
​ **【失败后停止】**
当遇到异常情况时是否停止动作。请注意:查询结果为空不一定会产生异常造成失败,请以实际测试结果为准。

## 各执行方式与输出 ### Query:查询并返回结果数据 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640143698711-fe8e2cd6-cd6e-4d6b-9200-b300ff933c69.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=676&id=ud584efab&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1351&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=109301&status=done&style=none&taskId=u6234648c-6856-433b-8e88-9fbcaba2f96&title=&width=628.5)
【是否成功】是否成功执行查询(不代表一定有返回结果)。
​ 【查询结果(表格)】
得到表格类型(DataTable)的查询结果。 可使用 “表格数据操作” 模块查看表格内容或进行其他处理。
​ 【查询结果(对象列表)】
得到动态对象的列表。每行为一个对象。
​ 【首项结果】
查询结果中的第一行数据。可以输出到动态对象或词典类型变量中。

### Execute:执行并返回影响的行数 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640143682457-cdff9b2f-4d07-427b-8159-5fc80d6d80d9.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=623&id=ufaa81500&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1245&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=94556&status=done&style=none&taskId=ubb064dc4-1805-4604-9478-6293930b9ee&title=&width=628.5)
【是否成功】
执行查询是否未出现异常。不代表实际更新了数据库。
​ 【影响行数】
创建、更新或删除的数据行数。

### ExecuteScalar:执行并返回单个值 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640143656730-2326a8e7-42ee-4516-a88d-98a840521841.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=606&id=udfda6dbc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1212&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=84217&status=done&style=none&taskId=u07dd0c3f-978b-4096-a43c-8a304e37791&title=&width=628.5)
【是否成功】
执行查询是否未出现异常。不代表实际更新了数据库。
【单值结果】
查询返回的单个结果。

## 遍历数据行 (需要Quicker 1.28.10+版本)
当通过SQL查询到一些数据以后,可以将结果输出到表格或者一个动态对象的列表,然后通过“每个”模块循环。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640160049295-ef47c835-9657-44b3-9b12-608822f80514.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=148&id=ucb6101c7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=295&originWidth=964&originalType=binary&ratio=1&rotation=0&showTitle=false&size=36538&status=done&style=none&taskId=u3de66aca-731e-4802-8294-b900d73a200&title=&width=482)
​ (1)对表格的每行进行循环。
请参考[表格变量类型](https://getquicker.net/KC/Help/Doc/tablevar#aBQ9t)文档中的说明。
​ (2)对动态对象的列表进行循环。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640160185426-bc774df7-5875-4353-8540-2b98d0cf6375.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=409&id=ue99d9a76&margin=%5Bobject%20Object%5D&name=image.png&originHeight=818&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=58216&status=done&style=none&taskId=u2c61a26c-16d3-4be8-be82-5dab2e3c294&title=&width=628.5)
此时,“项”应该输出到一个动态对象类型的变量中。在循环中,使用 `{行对象}.列名` 的方式访问某一列的数据。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640160248133-475ed2ed-7627-423a-92d0-afeef9563861.png#clientId=uc86ac18d-0e4b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=389&id=u80cf9ceb&margin=%5Bobject%20Object%5D&name=image.png&originHeight=777&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=62279&status=done&style=none&taskId=ua185ec42-e93c-4fa9-a6f1-b2ef1183efc&title=&width=628.5)
​ ​
# 参考 ​
### 类库使用 MySQL使用的库为[MySqlConnector](https://mysqlconnector.net/),SQLite使用的库为[System.Data.SQLite ](https://system.data.sqlite.org/)。

### 常见连接字符串格式参考 **SQLServer** - 标准:`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数据库 可以使用[这个子程序](https://getquicker.net/subprogram?id=343473d7-6677-46c5-7aee-08d9bf67e5c4)创建SQLite数据库,参数为要数据库文件的完整路径。
​ ​
# 示例动作 ​ 示例动作:[https://getquicker.net/Sharedaction?code=3eba3790-6c37-41c7-7aff-08d9bf67e5c4](https://getquicker.net/Sharedaction?code=3eba3790-6c37-41c7-7aff-08d9bf67e5c4)
​ ​