Oprette forbindelse til SQL Server fra Power Apps

Du kan oprette forbindelse til SQL Server i enten Azure eller en lokal database.

Bemærk

Nyoprettede SQL-datakilder har ikke længere præfikset [dbo], som de havde i tidligere versioner af Power Apps.

Du kan finde flere oplysninger under Almindelige problemer og løsninger til Power Apps.

Generere en app automatisk

Afhængigt af hvilken Power Apps-brugergrænseflade du bruger, skal du henvise til det nye udseende eller det klassiske udseende for at oprette en app.

  1. Log på Power Apps.

  2. Vælg enten indstillingen galleri med én side eller mobil med tre skærme på siden Start:

    • Hvis du vil oprette en galleriapp med en enkelt side og et dynamisk layout, skal du vælge en af følgende:
      • Start med data > Vælg eksterne data > Fra SQL.
      • Start med et sidedesign > Galleri, der er forbundet med eksterne data > Fra SQL.
    • Hvis du vil oprette en mobilapp til tre skærmbilleder, skal du vælge Start med en appskabelon > Fra SQL.
  3. Vælg din SQL-forbindelse, og vælg derefter en tabel. Hvis du vil vælge en anden forbindelse, skal du vælge overløbsmenuen ... for at skifte forbindelse eller oprette en ny SQL-forbindelse.

    Bemærk

    Der vises kun én forbindelse ad gangen.

  4. Vælg Opret app, når du er færdig.

Kald lagrede procedurer direkte i Power Fx (forhåndsversion)

Du kan nu direkte kalde SQL Server lagrede procedurer fra Power Fx. Som standard skal denne nye kontakt være tændt. Hvis ikke, kan du tænde den.

  1. Gå til Indstillinger > Opdateringer > Nye.
  2. Søg efter lagrede procedurer.
  3. Angiv Til for SQL Server-lagrede procedurer.
  4. Gem, og åbn appen igen.

Skærmbillede, der viser, at SQL Server-indstillingen for lagrede procedurer er slået til.

Når du føjer en SQL Server-forbindelse til din app, kan du nu tilføje tabeller og visninger eller lagrede procedurer. Denne funktion fungerer også sammen med sikre implicitte forbindelser.

Skærmbillede, der viser lister over tabeller, visninger og lagrede procedurer, der kan føjes til din app.

Hvis du ikke straks kan se den lagrede procedure, er det hurtigere at søge efter den.

Når du har valgt en lagret procedure, vises der en underordnet node, og du kan angive den lagrede procedure som Sikker at bruge til gallerier og tabeller. Hvis du markerer denne indstilling, kan du tildele den lagrede procedure som egenskaben Items til gallerier, så tabeller kan bruge den i din app.

Aktivér kun denne indstilling, hvis:

  1. Der ikke er sideeffekter ved at kalde denne procedure efter anmodning flere gange, når Power Apps-kontrolelementet opdateres. Når den bruges sammen med egenskaben Items for et galleri eller en tabel, kalder Power Apps den lagrede procedure, når systemet bestemmer, at det er nødvendigt at opdatere systemet. Du kan ikke styre, hvornår den lagrede procedure kaldes.
  2. Den mængde data, du returnerer i den lagrede procedure, er beskeden. Handlingskald, f.eks. lagrede procedurer, har ikke en grænse for det antal rækker, der hentes. De sideinddeles ikke automatisk i trin på 100 poster ligesom tabel- eller visningsdatakilder. Så hvis den lagrede procedure returnerer for mange data (mange tusind poster), kan din app blive langsom eller gå ned. Af hensyn til ydeevnen bør du medbringe mindre end 2.000 poster.

Vigtigt

Skemaet med returværdierne i den lagrede procedure skal være statisk. Det betyder, at det ikke ændrer sig fra opkald til opkald. Hvis du f.eks. kalder en lagret procedure, og den returnerer to tabeller, skal den altid returnere to tabeller. Du kan arbejde med enten indtastede eller ikke-indtastede resultater. Strukturen af resultaterne skal være den samme fra opkald til opkald. Hvis skemaet for resultaterne er dynamisk, vil resultaterne blive fjernet fra indtastningen, og du skal angive en type for at kunne bruge dem i Power Apps. Du kan finde flere oplysninger ved at gå til Ikke-indtastede resultater.

SQL-navneområde forud for gemt procedurenavn

Navnet på det SQL Server-navneområde, som den lagrede procedure er gemt i, er sat foran navnet på den lagrede procedure, der er oprettet for Power Apps den. For eksempel alle lagrede procedurer i'DBO'SQL · Server-navneområdet har'dbo'i · starten af navnet.

Eksempel

Når du tilføjer en lagret procedure, kan du muligvis se mere end én datakilde i projektet.

Skærmbillede, der viser SQL-datakilder.

Kald en lagret procedure

Hvis du vil bruge en lagret procedure i Power Apps, skal du først indlede det lagrede procedurenavn med navnet på den connector, der er knyttet til den, og navnet på den lagrede procedure. 'Paruntimedb.dbonewdbrarybook' i eksemplet illustrerer dette mønster. Når Power Apps den lagrede procedure indsættes, sammenkædes navneområdet og procedurenavnet, og 'dbo.newlibrarybook' bliver til 'dbonewlibrarybook'.

Argumenter overføres som en Power Apps post med navngivne værdipar:

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >})

Husk at konvertere værdier efter behov, når du overfører dem til din gemte procedure efter behov, da du læser fra en tekstværdi i Power Apps. Hvis du f.eks. opdaterer et heltal i SQL, skal du konvertere teksten i feltet ved hjælp af 'Value()'.

Direkte kald af lagrede procedurer.

Adgang til resultater

En gemt procedure kan returnere en kode, værdier fra Out-parametre eller resultaterne af forespørgsler. Du kan få adgang til disse resultater ved at bruge følgende mønstre:

Returkode

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ReturnCode

Brug dette til at få adgang til resultaterne af en returopgørelse.

Outputparametre

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).OutputParameters.<parameterName>

Vær opmærksom på at bruge parameternavnet, som det vises i JSON-nyttedataene.

Resultater sæt

<datasourceName>.<StoredprocedureName>({<paramName1: value, paramName2: value, ... >}).ResultSets.Table1

Yderligere tabeller kan tilgås via deres navn (f.eks. Tabel1, Tabel2, Tabel3, ...)

Ikke-indtastede resultater

Nogle komplicerede lagrede procedurer returnerer et ikke-indtastet resultat. Disse resultater er ikke tilgængelige direkte. Du skal først angive en type. Du kan få adgang til dataene ved hjælp af følgende mønster.

I dette eksempel trækker vi først resultaterne ind i en variabel med navnet "MyUntypedObject". Derefter trækker vi 'Tabel1' fra den variabel og sætter den ind i en variabel med navnet 'tabel1'. Dette trin er ikke strengt nødvendigt. Det er dog nyttigt at sætte alle resultaterne i en variabel på et tidspunkt og derefter trække de dele ud, du har brug for. Derefter gentager vi gennem tabel1 og udtrækker JSON-elementerne i navngivne værdipar. Sørg for at matche navnene med de navne, der returneres i JSON-nyttedataene. Hvis du vil validere, skal du åbne en Power Apps skærm og se på brødtekstsektionen, datanoden for en post.

Set(
    <MyUntypedObject>,
    <datasourceName>.<StoredprocedureName>( 
      { <paramName1>: "someString" }
    ).ResultSets
);
Set(
    table1,
    <MyUntypedObject>.Table1
);
Set(
    TypedTable,
    ForAll(
        table1,
        {
            BookID: Value(ThisRecord.BookID),
            BookName: Text(ThisRecord.BookName)
        }
    )
);

Du kan få adgang til en gemt procedure for egenskaben Items i et galleri, når du har erklæret den sikker for brugergrænsefladen. Reference til datakildenavnet og navnet på den lagrede procedure efterfulgt af 'ResultSets'. Du kan få adgang til flere resultater ved at referere til det sæt tabeller, der returneres, f.eks. Tabel 1, Tabel 2 osv.

Din adgang til en gemt procedure for en datakilde med navnet 'Paruntimedb' med en gemt procedure med navnet 'dbo.spo_show_all_library_books()' ser ud som følger.

Paruntimedb.dbospshowalllibrarybooks().ResultSets.Table1

Derved udfyldes galleriet med poster. Lagrede procedurer er dog en tilføjelse af handlingsfunktionsmåder til den tabellariske model. Refresh() fungerer kun med datakilder i tabellarisk format og kan ikke bruges sammen med lagrede procedurer. Derefter skal du opdatere galleriet, når en post oprettes, opdateres eller slettes. Når du bruger en Submit() i en formular til en datakilde i tabelform, kalder den effektivt Refresh() under dækslerne og opdaterer galleriet.

Du kan løse problemet med denne begrænsning ved at bruge en variabel i egenskaben OnVisible til skærmen og angive den gemte procedure til variablen.

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

Angiv derefter egenskaben 'Items' for galleriet til variabelnavnet.

SP_Books

Når du har oprettet, opdateret eller slettet en post med et kald til den gemte procedure, skal du angive variablen igen. Derved opdateres galleriet.

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

Kendte problemer

SQL-datakilder føjer ikke længere et [dbo]-præfiks til datakildenavnet

Præfikset [dbo] tjener ikke noget praktisk formål i Power Apps, da datakildenavne automatisk behandles som flertydige. Eksisterende datakilder påvirkes ikke af denne ændring, men eventuelle SQL-datakilder, der netop er tilføjet, indeholder ikke præfikset.

Hvis du har brug for at opdatere et stort antal formler i en af dine apps, kan Power Apps-kildefilpakken og værktøjet til udpakning bruges til at udføre en global søgning og erstatning.

Bemærk

Fra og med version 3.21054 opdaterer vi automatisk brudte referencer til ældre navne til det nye datakildenavn, når datakilden er læst.

Næste trin

Bemærk

Kan du fortælle os om dine sprogpræferencer for dokumentation? Tag en kort undersøgelse. (bemærk, at denne undersøgelse er på engelsk)

Undersøgelsen tager ca. syv minutter. Der indsamles ingen personlige data (erklæring om beskyttelse af personlige oplysninger).