Lezen in het Engels

Delen via


Parameters voor Odbc.DataSource

De functie Odbc.DataSource heeft twee parameters: een connectionString voor uw stuurprogramma en een options record waarmee u verschillende gedrag van stuurprogramma's kunt overschrijven. Via de optiesrecord kunt u mogelijkheden en andere informatie overschrijven die door het stuurprogramma worden gerapporteerd, het navigatorgedrag beheren en invloed hebben op de SQL-query's die door de M-engine worden gegenereerd.

De ondersteunde opties records worden onderverdeeld in twee categorieën: velden die openbaar en altijd beschikbaar zijn, en velden die alleen beschikbaar zijn in een uitbreidbaarheidscontext.

In de volgende tabel worden de openbare velden in de optiesrecord beschreven.

Veld Beschrijving
CommandTimeout Een duurwaarde waarmee wordt bepaald hoe lang de query aan de serverzijde mag worden uitgevoerd voordat deze wordt geannuleerd.

Standaard: 10 minuten
ConnectionTimeout Een duurwaarde waarmee wordt bepaald hoe lang moet worden gewacht voordat een poging tot het maken van een verbinding met de server wordt afgelaten.

Standaard: 15 seconden
CreateNavigationProperties Een logische waarde waarmee wordt ingesteld of navigatie-eigenschappen voor de geretourneerde tabellen moeten worden gegenereerd. Navigatie-eigenschappen zijn gebaseerd op relaties met refererende sleutels die door het stuurprogramma zijn gerapporteerd. Deze eigenschappen worden weergegeven als 'virtuele' kolommen die kunnen worden uitgevouwen in de query-editor, waardoor de juiste join wordt gemaakt.

Als het berekenen van afhankelijkheden van refererende sleutels een dure bewerking voor uw stuurprogramma is, kunt u deze waarde instellen op onwaar.

Standaardwaarde: waar
HierarchicalNavigation Een logische waarde waarmee wordt ingesteld of de tabellen moeten worden weergegeven die zijn gegroepeerd op basis van de schemanamen. Wanneer deze is ingesteld op onwaar, worden tabellen weergegeven in een platte lijst onder elke database.

Standaardwaarde: onwaar
SqlCompatibleWindowsAuth Een logische waarde waarmee wordt bepaald of een met SQL Server compatibele verbindingsreeks moet worden geproduceerd bij het gebruik van Windows-verificatieTrusted_Connection=Yes.

Als uw stuurprogramma Ondersteuning biedt voor Windows-verificatie, maar extra of alternatieve instellingen in uw verbindingsreeks vereist, moet u deze waarde instellen op onwaar en het CredentialConnectionString veld opties opnemen dat wordt beschreven in de volgende tabel.

Standaardwaarde: waar

In de volgende tabel worden de recordvelden beschreven die alleen beschikbaar zijn via uitbreidbaarheid. Velden die geen eenvoudige letterlijke waarden zijn, worden beschreven in latere secties.

Veld Beschrijving
AstVisitor Een record met een of meer onderdrukkingen om het genereren van SQL-query's te beheren. Het meest voorkomende gebruik van dit veld is om logica te bieden voor het genereren van een LIMIT/OFFSET-component voor stuurprogramma's die geen ondersteuning bieden voor TOP.

Velden bevatten Constant en LimitClause.

Meer informatie: AstVisitor overschrijven
CancelQueryExplicitly Een logische waarde die de M-engine opdracht geeft om actieve aanroepen expliciet te annuleren via het ODBC-stuurprogramma voordat de verbinding met de ODBC-server wordt beëindigd.

Dit veld is handig in situaties waarin de uitvoering van query's onafhankelijk van de netwerkverbindingen met de server wordt beheerd, bijvoorbeeld in sommige Spark-implementaties. In de meeste gevallen hoeft deze waarde niet te worden ingesteld omdat de query op de server wordt geannuleerd wanneer de netwerkverbinding met de server wordt beëindigd.

Standaardwaarde: onwaar
ClientConnectionPooling Een logische waarde waarmee groepsgewijze verbindingen aan de clientzijde voor het ODBC-stuurprogramma mogelijk zijn. De meeste stuurprogramma's willen deze waarde instellen op waar.

Standaardwaarde: onwaar
CredentialConnectionString Een tekst- of recordwaarde die wordt gebruikt voor het opgeven van referenties verbindingsreeks eigenschappen.
HideNativeQuery Een logische waarde waarmee wordt bepaald of de connector gegenereerde SQL-instructies weergeeft in de Gebruikerservaring van Power Query. Dit moet alleen worden ingesteld op waar als de back-endgegevensbron systeemeigen ONDERSTEUNING biedt voor SQL-92.

Standaardwaarde: onwaar
ImplicitTypeConversions Een tabelwaarde met impliciete typeconversies die worden ondersteund door uw stuurprogramma of back-endserver. Waarden in deze tabel zijn additief aan de conversies die door het stuurprogramma zelf zijn gerapporteerd.

Dit veld wordt meestal gebruikt met het SQLGetTypeInfo veld bij het overschrijven van gegevenstypegegevens die door het stuurprogramma worden gerapporteerd.
OnError Een foutafhandelingsfunctie die een errorRecord parameter van het type recordontvangt.

Veelvoorkomende toepassingen van deze functie zijn het afhandelen van SSL-verbindingsfouten, het leveren van een downloadkoppeling als uw stuurprogramma niet op het systeem wordt gevonden en verificatiefouten rapporteert.
SoftNumbers Hiermee kan de M-engine een compatibel gegevenstype selecteren wanneer de conversie tussen twee specifieke numerieke typen niet wordt gedeclareerd als ondersteund in de SQL_CONVERT_*-mogelijkheden.

Standaardwaarde: onwaar
SqlCapabilities Een record die verschillende onderdrukkingen van stuurprogrammamogelijkheden biedt en een manier om mogelijkheden op te geven die niet worden uitgedrukt via ODBC 3.8.

Meer informatie: SqlCapabilities overschrijven
SQLColumns Een functie waarmee u kolommetagegevens kunt wijzigen die door de SQLColumns functie worden geretourneerd.

Meer informatie: SQLColumns overschrijven
SQLGetFunctions Een record waarmee u waarden kunt overschrijven die worden geretourneerd door aanroepen naar SQLGetFunctions.

Dit veld wordt vaak gebruikt om het gebruik van parameterbinding uit te schakelen of om op te geven dat gegenereerde query's CAST moeten gebruiken in plaats van CONVERTEREN.

Meer informatie: SQLGetFunctions overschrijven
SQLGetInfo Een record waarmee u waarden kunt overschrijven die worden geretourneerd door aanroepen naar SQLGetInfo.

Meer informatie: SQLGetInfo overschrijven
SQLGetTypeInfo Een tabel of functie die een tabel retourneert die de typegegevens overschrijft die worden geretourneerd door SQLGetTypeInfo.

Wanneer de waarde is ingesteld op een tabel, vervangt de waarde de typegegevens die door het stuurprogramma worden gerapporteerd, volledig. SQLGetTypeInfo wordt niet gebeld.

Wanneer de waarde is ingesteld op een functie, ontvangt uw functie het resultaat van de oorspronkelijke aanroep, SQLGetTypeInfozodat u de tabel kunt wijzigen.

Dit veld wordt meestal gebruikt wanneer er sprake is van een niet-overeenkomende gegevenstypen die door SQLGetTypeInfo en SQLColumns.

Meer informatie: SQLGetTypeInfo overschrijven
SQLTables Een functie waarmee u de metagegevens van de tabel kunt wijzigen die worden geretourneerd door een aanroep naar SQLTables.
TolerateConcatOverflow Hiermee kunt u tekstwaarden samenvoegen, zelfs als het resultaat mogelijk wordt afgekapt om binnen het bereik van een beschikbaar type te passen.

Wanneer u bijvoorbeeld een VARCHAR-veld(4000) samenvoegt met een VARCHAR(4000)-veld op een systeem dat ondersteuning biedt voor een maximale VARCHAR-grootte van 4000 en geen CLOB-type, wordt de samenvoeging gevouwen, zelfs als het resultaat mogelijk wordt afgekapt.

Standaardwaarde: onwaar
UseEmbeddedDriver (intern gebruik): Een logische waarde waarmee wordt bepaald of het ODBC-stuurprogramma moet worden geladen vanuit een lokale map (met behulp van nieuwe functionaliteit die is gedefinieerd in de ODBC 4.0-specificatie). Deze waarde wordt over het algemeen alleen ingesteld door connectors die door Microsoft worden gemaakt die worden verzonden met Power Query.

Als deze is ingesteld op false, wordt het systeem ODBC-stuurprogrammabeheer gebruikt om het stuurprogramma te zoeken en te laden.

De meeste connectors hoeven dit veld niet in te stellen.

Standaardwaarde: onwaar

AstVisitor overschrijven

Het AstVisitor veld wordt ingesteld via de odbc.DataSource-optiesrecord . Deze wordt gebruikt om SQL-instructies te wijzigen die zijn gegenereerd voor specifieke queryscenario's.

Notitie

Stuurprogramma's die ondersteuning bieden voor LIMIT- en OFFSET-componenten (in plaats van TOP) willen een LimitClause onderdrukking voor AstVisitor.

Constante

Het opgeven van een onderdrukking voor deze waarde is afgeschaft en kan worden verwijderd uit toekomstige implementaties.

LimitClause

Dit veld is een functie die twee Int64.Type argumenten (skip, take) ontvangt en een record retourneert met twee tekstvelden (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

De skip parameter is het aantal rijen dat moet worden overgeslagen (het argument voor VERSCHUIVING). Als er geen offset is opgegeven, is de waarde voor overslaan null. Als uw stuurprogramma LIMIT ondersteunt, maar offset niet ondersteunt, moet de LimitClause functie een niet-geïmplementeerde fout (...) retourneren wanneer het overslaan groter is dan 0.

De take parameter is het aantal rijen dat moet worden gebruikt (dat wil gezegd het argument LIMIT).

Het Text veld van het resultaat bevat de SQL-tekst die moet worden toegevoegd aan de gegenereerde query.

In Location het veld wordt aangegeven waar de component moet worden ingevoegd. In de volgende tabel worden ondersteunde waarden beschreven.

Weergegeven als Beschrijving Voorbeeld
AfterQuerySpecification DE LIMIT-component wordt aan het einde van de gegenereerde SQL geplaatst.

Dit is de meest ondersteunde LIMIT-syntaxis.
SELECT a, b, c

FROM-tabel

WHERE a > 10

LIMIET 5
BeforeQuerySpecification DE LIMIT-component wordt vóór de gegenereerde SQL-instructie geplaatst. LIMIET VAN 5 RIJEN

SELECT a, b, c

FROM-tabel

WHERE a > 10
AfterSelect LIMIT gaat na de SELECT-instructie en na eventuele wijzigingsaanpassingen (zoals DISTINCT). SELECT DISTINCT LIMIT 5 a, b, c

FROM-tabel

WHERE a > 10
AfterSelectBeforeModifiers LIMIT gaat na de SELECT-instructie, maar vóór eventuele modifiers (zoals DISTINCT). SELECT LIMIT 5 DISTINCT a, b, c

FROM-tabel

WHERE a > 10

Het volgende codefragment biedt een LimitClause-implementatie voor een stuurprogramma dat een LIMIT-component verwacht, met een optionele OFFSET, in de volgende indeling: [OFFSET <offset> ROWS] LIMIT <row_count>

LimitClause = (skip, take) =>
    let
        offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
        limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
    in
        [
            Text = Text.Format("#{0} #{1}", {offset, limit}),
            Location = "AfterQuerySpecification"
        ]

Het volgende codefragment biedt een LimitClause implementatie voor een stuurprogramma dat LIMIT ondersteunt, maar niet OFFSET. Indeling: LIMIT <row_count>.

LimitClause = (skip, take) =>
    if (skip > 0) then error "Skip/Offset not supported"
    else
    [
        Text = Text.Format("LIMIT #{0}", {take}),
        Location = "AfterQuerySpecification"
    ]

SqlCapabilities overschrijven

Veld DETAILS
FractionalSecondsScale Een getalwaarde tussen 1 en 7 dat het aantal decimalen aangeeft dat wordt ondersteund voor milliseconden. Deze waarde moet worden ingesteld door connectors die het vouwen van query's via datum/tijd-waarden willen inschakelen.

Standaardwaarde: null
PrepareStatements Een logische waarde die aangeeft dat instructies moeten worden voorbereid met behulp van SQLPrepare.

Standaardwaarde: onwaar
SupportsTop Een logische waarde die aangeeft dat het stuurprogramma de TOP-component ondersteunt om het aantal geretourneerde rijen te beperken.

Standaardwaarde: onwaar
StringLiteralEscapeCharacters Een lijst met tekstwaarden die de tekens opgeven die moeten worden gebruikt bij het ontsnappen van letterlijke tekenreeksen en LIKE-expressies.

Voorbeeld: {""}

Standaardwaarde: null
SupportsDerivedTable Een logische waarde die aangeeft dat het stuurprogramma afgeleide tabellen ondersteunt (subselecties).

Deze waarde wordt verondersteld waar te zijn voor stuurprogramma's die hun nalevingsniveau instellen op SQL_SC_SQL92_FULL (gerapporteerd door het stuurprogramma of overschreven met de instelling Sql92Conformance. Voor alle andere nalevingsniveaus wordt deze waarde standaard ingesteld op onwaar.

Als uw stuurprogramma het SQL_SC_SQL92_FULL nalevingsniveau niet rapporteert, maar wel afgeleide tabellen ondersteunt, stelt u deze waarde in op waar.

Het ondersteunen van afgeleide tabellen is vereist voor veel DirectQuery-scenario's.
SupportsNumericLiterals Een logische waarde die aangeeft of de gegenereerde SQL numerieke letterlijke waarden moet bevatten. Als deze optie is ingesteld op onwaar, worden numerieke waarden altijd opgegeven met behulp van parameterbinding.

Standaardwaarde: onwaar
SupportsStringLiterals Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor tekenreeksen moet bevatten. Als deze optie is ingesteld op onwaar, worden tekenreekswaarden altijd opgegeven met behulp van parameterbinding.

Standaardwaarde: onwaar
SupportsOdbcDateLiterals Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor datums moet bevatten. Als deze optie is ingesteld op onwaar, worden datumwaarden altijd opgegeven met behulp van parameterbinding.

Standaardwaarde: onwaar
SupportsOdbcTimeLiterals Een logische waarde die aangeeft of de gegenereerde SQL waarden voor letterlijke tijd moet bevatten. Als deze optie is ingesteld op onwaar, worden tijdwaarden altijd opgegeven met behulp van parameterbinding.

Standaardwaarde: onwaar
SupportsOdbcTimestampLiterals Een logische waarde die aangeeft of de gegenereerde SQL letterlijke waarden voor tijdstempels moet bevatten. Als deze optie is ingesteld op onwaar, worden tijdstempelwaarden altijd opgegeven met behulp van parameterbinding.

Standaardwaarde: onwaar

SQLColumns overschrijven

SQLColumns is een functiehandler die de resultaten van een ODBC-aanroep naar SQLColumns ontvangt. De bronparameter bevat een tabel met de gegevenstypegegevens. Deze onderdrukking wordt doorgaans gebruikt om niet-overeenkomende gegevenstypen tussen aanroepen naar SQLGetTypeInfo en SQLColumns.

Ga naar de functie SQLColumns voor meer informatie over de indeling van de brontabelparameter.

SQLGetFunctions overschrijven

Dit veld wordt gebruikt om waarden te overschrijven SQLFunctions die worden geretourneerd door een ODBC-stuurprogramma. Het bevat een record waarvan veldnamen gelijk zijn aan de FunctionId constanten die zijn gedefinieerd voor de functie ODBC SQLGetFunctions . Numerieke constanten voor elk van deze velden vindt u in de ODBC-specificatie.

Veld DETAILS
SQL_CONVERT_FUNCTIONS Geeft aan welke functie(s) worden ondersteund bij het uitvoeren van typeconversies. De M Engine probeert standaard de functie CONVERT te gebruiken. Stuurprogramma's die de voorkeur geven aan het gebruik van CAST, kunnen deze waarde overschrijven om te rapporteren dat alleen SQL_FN_CVT_CAST (numerieke waarde van 0x2) wordt ondersteund.
SQL_API_SQLBINDCOL Een logische waarde (waar/onwaar) die aangeeft of de mashup-engine de SQLBindCol-API moet gebruiken bij het ophalen van gegevens. Als deze is ingesteld op onwaar, wordt SQLGetData in plaats daarvan gebruikt.

Standaardwaarde: onwaar

Het volgende codefragment bevat een voorbeeld waarin de M-engine expliciet wordt verteld dat cast moet worden gebruikt in plaats van CONVERTEREN.

SQLGetFunctions = [
    SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

SQLGetInfo overschrijven

Dit veld wordt gebruikt om waarden te overschrijven SQLGetInfo die worden geretourneerd door een ODBC-stuurprogramma. Het bevat een record waarvan de velden namen zijn die gelijk zijn aan de InfoType constanten die zijn gedefinieerd voor de functie ODBC SQLGetInfo . Numerieke constanten voor elk van deze velden vindt u in de ODBC-specificatie. De volledige lijst InfoTypes met gecontroleerd bestanden vindt u in de mashup engine traceringsbestanden.

De volgende tabel bevat veelgebruikte SQLGetInfo eigenschappen:

Veld DETAILS
SQL_SQL_CONFORMANCE Een geheel getal dat het niveau van SQL-92 aangeeft dat wordt ondersteund door het stuurprogramma:

(1) SQL_SC_SQL92_ENTRY: Compatibel met SQL-92 op invoerniveau.
(2) SQL_SC_FIPS127_2_TRANSITIONAL: FIPS 127-2-overgangsniveau conform.
(4) compatibel met SQL-92 SQL_SC_ SQL92_INTERMEDIATE"- tussenliggend niveau.
(8) SQL_SC_SQL92_FULL: compatibel met SQL-92 op volledig niveau.

In Power Query-scenario's wordt de connector gebruikt in de modus Alleen-lezen. De meeste stuurprogramma's willen een SQL_SC_SQL92_FULL nalevingsniveau rapporteren en het gedrag van specifieke SQL-generatie overschrijven met behulp van de SQLGetInfo en SQLGetFunctions eigenschappen.
SQL_SQL92_PREDICATES Een bitmasker waarin de predicaten worden opgesomd die worden ondersteund in een SELECT-instructie, zoals gedefinieerd in SQL-92.

Ga naar SQL_SP_* constanten in de ODBC-specificatie.
SQL_AGGREGATE_FUNCTIONS Een bitmasker met een opsomming van ondersteuning voor aggregatiefuncties.

SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM

Ga naar SQL_AF_* constanten in de ODBC-specificatie.
SQL_GROUP_BY Een geheel getal dat de relatie aangeeft tussen de kolommen in de GROUP BY-component en de niet-geaggregeerde kolommen in de selectielijst:

SQL_GB_COLLATE: aan het einde van elke groeperingskolom kan een COLLATE-component worden opgegeven.

SQL_GB_NOT_SUPPORTED: GROUP BY-componenten worden niet ondersteund.

SQL_GB_GROUP_BY_EQUALS_SELECT: De GROUP BY-component moet alle niet-geaggregeerde kolommen in de selectielijst bevatten. Het mag geen andere kolommen bevatten. SELECTEER BIJVOORBEELD DEPT, MAX(SALARIS) VAN WERKNEMERSGROEP PER AFDELING.

SQL_GB_GROUP_BY_CONTAINS_SELECT: De GROUP BY-component moet alle niet-geaggregeerde kolommen in de selectielijst bevatten. Het kan kolommen bevatten die niet in de selectielijst zitten. SELECTEER BIJVOORBEELD DEPT, MAX(SALARIS) VAN WERKNEMERSGROEP PER AFDELING, LEEFTIJD.

SQL_GB_NO_RELATION: De kolommen in de GROUP BY-component en de selectielijst zijn niet gerelateerd. De betekenis van niet-gegroepeerde, niet-geaggregeerde kolommen in de selectielijst is afhankelijk van de gegevensbron. SELECTEER BIJVOORBEELD DEPT, SALARIS VAN WERKNEMERSGROEP OPPT, LEEFTIJD.

Ga naar SQL_GB_* constanten in de ODBC-specificatie.

De volgende helperfunctie kan worden gebruikt om bitmaskerwaarden te maken op basis van een lijst met gehele getallen:

Flags = (flags as list) =>
    let
        Loop = List.Generate(
                  ()=> [i = 0, Combined = 0],
                  each [i] < List.Count(flags),
                  each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
                  each [Combined]),
        Result = List.Last(Loop, 0)
    in
        Result;

SQLGetTypeInfo overschrijven

SQLGetTypeInfo kan op twee manieren worden opgegeven:

  • Een vaste table waarde die dezelfde typegegevens bevat als een ODBC-aanroep naar SQLGetTypeInfo.
  • Een functie die een tabelargument accepteert en een tabel retourneert. Het argument bevat de oorspronkelijke resultaten van de ODBC-aanroep naar SQLGetTypeInfo. Uw functie-implementatie kan deze tabel wijzigen of toevoegen.

De eerste methode wordt gebruikt om de waarden die worden geretourneerd door het ODBC-stuurprogramma volledig te overschrijven. De tweede methode wordt gebruikt als u deze waarden wilt toevoegen of wijzigen.

Voor meer informatie over de indeling van de tabelparameter typen en de verwachte retourwaarde gaat u naar de functiereferentie van SQLGetTypeInfo.

SQLGetTypeInfo met behulp van een statische tabel

Het volgende codefragment biedt een statische implementatie voor SQLGetTypeInfo.

SQLGetTypeInfo = #table(
    { "TYPE_NAME",      "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",           "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

    { "char",           1,          65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,            -8,              null,               null,             0,                    0                }, 
    { "int8",           -5,         19,             "'",            "'",              null,                     1,          0,                2,            0,                    10,                 0,                   "int8",            0,               0,               -5,              null,               2,                0,                    0                },
    { "bit",            -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "bool",           -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "date",           9,          10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "numeric",        3,          28,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "numeric",         0,               0,               2,               null,               10,               0,                    0                },
    { "float8",         8,          15,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "float8",         6,          17,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "uuid",           -11,        37,             null,           null,             null,                     1,          0,                2,            null,                 0,                  null,                "uuid",            null,            null,            -11,             null,               null,             0,                    0                },
    { "int4",           4,          10,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "int4",            0,               0,               4,               null,               2,                0,                    0                },
    { "text",           -1,         65535,          "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "text",            null,            null,            -10,             null,               null,             0,                    0                },
    { "lo",             -4,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "lo",              null,            null,            -4,              null,               null,             0,                    0                }, 
    { "numeric",        2,          28,             null,           null,             "precision, scale",       1,          0,                2,            0,                    10,                 0,                   "numeric",         0,               6,               2,               null,               10,               0,                    0                },
    { "float4",         7,          9,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "float4",          null,            null,            7,               null,               2,                0,                    0                }, 
    { "int2",           5,          19,             null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "int2",           -6,         5,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "timestamp",      11,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "date",           91,         10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "timestamp",      93,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "bytea",          -3,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "bytea",           null,            null,            -3,              null,               null,             0,                    0                }, 
    { "varchar",        12,         65535,          "'",            "'",              "max. length",            1,          0,                2,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                }, 
    { "char",           -8,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,           -8,               null,               null,             0,                    0                }, 
    { "text",           -10,        65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "text",            null,            null,           -10,              null,               null,             0,                    0                }, 
    { "varchar",        -9,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                },
    { "bpchar",         -8,         65535,           "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "bpchar",          null,            null,            -9,               null,               null,            0,                    0                } }
);

SQLGetTypeInfo met behulp van een functie

Met de volgende codefragmenten wordt het bpchar type toegevoegd aan de bestaande typen die door het stuurprogramma worden geretourneerd.

SQLGetTypeInfo = (types as table) as table =>
   let
       newTypes = #table(
           {
               "TYPE_NAME",
               "DATA_TYPE",
               "COLUMN_SIZE",
               "LITERAL_PREF",
               "LITERAL_SUFFIX",
               "CREATE_PARAS",
               "NULLABLE",
               "CASE_SENSITIVE",
               "SEARCHABLE",
               "UNSIGNED_ATTRIBUTE",
               "FIXED_PREC_SCALE",
               "AUTO_UNIQUE_VALUE",
               "LOCAL_TYPE_NAME",
               "MINIMUM_SCALE",
               "MAXIMUM_SCALE",
               "SQL_DATA_TYPE",
               "SQL_DATETIME_SUB",
               "NUM_PREC_RADIX",
               "INTERNAL_PRECISION",
               "USER_DATA_TYPE"
            },
            // we add a new entry for each type we want to add
            {
                {
                    "bpchar",
                    -8,
                    65535,
                    "'",
                    "'",
                    "max. length",
                    1,
                    1,
                    3,
                    null,
                    0,
                    null,
                    "bpchar",
                    null,
                    null,
                    -9,
                    null,
                    null,
                    0,
                    0
                }
            }),
        append = Table.Combine({types, newTypes})
    in
        append;

De verbindingsreeks instellen

De verbindingsreeks voor het ODBC-stuurprogramma wordt ingesteld met behulp van het eerste argument voor de functies Odbc.DataSource en Odbc.Query. De waarde kan tekst of een M-record zijn. Wanneer u de record gebruikt, wordt elk veld in de record een eigenschap in de verbindingsreeks. Alle verbindingsreeks vereisen een Driver veld (of DSN veld als u wilt dat gebruikers een DSN op systeemniveau vooraf configureren). Eigenschappen met betrekking tot referenties worden afzonderlijk ingesteld. Andere eigenschappen zijn specifiek voor stuurprogramma's.

In het onderstaande codefragment ziet u de definitie van een nieuwe gegevensbronfunctie, het maken van de record en het ConnectionString aanroepen van de functie Odbc.DataSource .

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
    let
        ConnectionString = [
            Driver = "SQL Server Native Client 11.0",
            Server = server,
            MultiSubnetFailover = "Yes",
            ApplicationIntent = "ReadOnly",
            APP = "PowerBICustomConnector"
        ],
        OdbcDatasource = Odbc.DataSource(ConnectionString)
    in
        OdbcDatasource;

Volgende stappen