从 Power Apps 连接到 SQL Server

您可以在 Azure 或本地数据库中连接到 SQL Server。

备注

新创建的 SQL 数据源不再具有 [dbo] 前缀,像在 Power Apps 的早期版本中一样。

有关详细信息,请参阅 Power Apps 的常见问题和解决方法

自动生成应用

根据您正在使用的 Power Apps 界面,引用新外观经典外观以生成应用。

  1. 登录到 Power Apps

  2. 主页中,选择_单页库_或_三屏移动应用_选项:

    • 要创建具有响应式布局的单页库应用,请选择:
      • 从数据开始 > 选择外部数据 > 从 SQL
      • 从页面设计开始 > 连接到外部数据的库 > 从 SQL
    • 要创建三屏移动应用,请选择从应用模板开始 > 来自 SQL
  3. 选择您的 SQL 连接,然后选择一个表。 若要选择其他连接,请选择 ... 溢出菜单以切换连接或创建新的 SQL 连接。

    备注

    一次只能显示一个连接。

  4. 完成后,选择创建应用

直接在 Power Fx 中调用存储过程(预览版)

您可以通过打开 SQL Server 存储过程预览切换来直接从 Power Fx 中调用 SQL Server 存储过程。

备注

不支持输出参数。

  1. 转到设置 > 即将推出的功能 > 预览
  2. 搜索存储过程
  3. 针对 SQL Server 存储过程将开关设置为
  4. 保存并重新打开应用。

显示 SQL Server 存储过程切换设置为开的屏幕截图。

在向您的应用添加 SQL Server 连接时,现在可以将表和视图添加到存储过程。 此功能也适用于安全隐式连接。

显示可添加到您的应用的表、视图和存储过程列表的屏幕截图。

如果无法立即查看存储过程,则搜索它会更快。

选择存储过程后,将显示一个子节点,您可以将存储过程指定为库和表的安全使用。 如果您选中此选项,可以将存储过程分配为 Items 属性以供在您的应用中使用库和表。

仅在以下情况下启用此选项:

  1. 每次 Power Apps 刷新控件时,多次按需调用此过程没有副作用。 当与库或表的 Items 属性一起使用时,只要系统确定需要刷新,Power Apps 就会调用存储过程。 您无法控制何时调用存储过程。
  2. 在存储过程中返回的数据量适中。 操作调用(例如存储过程)对检索的行数没有限制。 它们不会自动以 100 条记录增量进行分页,例如表格数据源(如表或视图)。 因此,如果存储过程返回的数据过多(数千条记录),则您的应用可能会变慢或崩溃。 出于性能原因,您引入的记录应少于 2,000 条。

重要

存储过程的返回值的架构应该是静态。 这意味着,它不会因调用而更改。 例如,如果调用存储过程并且它返回两个表,则它应始终返回两个表。 如果结果的架构是动态,则不应将其与 Power Apps 一起使用。 例如,如果您调用存储过程,但它有时返回一个表,有时返回两个表,则它将无法在 Power Apps 中正常工作。 Power Apps 在此调用中需要静态架构。

示例

当添加存储过程时,您可能会在项目中看到多个数据源。

显示 SQL 数据源的屏幕截图。

若要在 Power Apps 中使用存储过程,请首先在存储过程名称前面加上与之关联的连接器名称前缀,然后命名该存储过程。 示例中的“Paruntimedb.dbonewlibrarybook”演示了此模式。 另请注意,当 Power Apps 中引入存储过程时,它会连接全名。 因此,“dbo.newlibrarybook”将变为“dbonewlibrarybook”。

请记住,在将值传递到存储过程中时,请在必要时适当地转换值,因为您正在 Power Apps 中读取文本值。 例如,如果您要在 SQL 中更新整数,则必须使用“Value()”转换字段中的文本。

直接调用存储过程。

在声明库的 Items 属性对 UI 安全之后,您可以访问该属性的存储过程。 引用数据源名称和后跟“ResultSets”的存储过程的名称。 您可以通过引用返回的一组表(例如表 1、表 2 等)来访问多个结果。

例如,您使用名为“dbo.spo_show_all_library_books()”的存储过程访问名为“Paruntimedb”的数据源的存储过程的流程将如下所示。

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

这将使用记录填充库。 但是,存储过程是向表格模型添加操作行为。 Refresh() 仅适用于表格数据源,不能用于存储过程。 然后,当创建、更新或删除记录时,需要刷新该库。 当您在表格数据源的窗体上使用 Submit() 时,它会在幕后有效调用 Refresh() 并刷新该库。

若要完成此限制,请使用屏幕的 OnVisible 属性中的变量,然后将存储过程设置为变量。

Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

然后将库的“Items”属性设置为变量名称。

SP_Books

然后,在通过调用存储过程创建、更新或删除记录后,再次设置变量。 这将更新库。

Paruntimedb.dbonewlibrarybook({   
  book_name: DataCardValue3_2.Text, 
  author: DataCardValue1_2.Text,
    ...
});
Set(SP_Books, Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1);

已知问题

SQL 数据源不再将 [dbo] 前缀添加到数据源名称

[dbo] 前缀在 Power Apps 中没有任何实际用途,因为数据源名称会自动消除歧义。 现有数据源不会受此更改影响,但新添加的任何 SQL 数据源不包含前缀。

如果需要在您的应用之一中更新大量公式,可以使用 Power Apps 源文件包和解压缩实用工具执行全局搜索和替换。

备注

从版本 3.21054 开始,我们将在读取数据源后自动将损坏的旧名称引用更新为新数据源名称。

后续步骤

备注

您能告诉我们您的文档语言首选项吗? 进行简短调查。(请注意,此调查是英文版调查)

此调查大约需要七分钟。 不会收集个人数据(隐私声明)。