SQLSetEnvAttr-funktion

Överensstämmelse
Version introducerad: ODBC 3.0 Standardsefterlevnad: ISO 92

Summary
SQLSetEnvAttr sätter attribut som styr aspekter av miljöer.

Syntax

  
SQLRETURN SQLSetEnvAttr(  
     SQLHENV      EnvironmentHandle,  
     SQLINTEGER   Attribute,  
     SQLPOINTER   ValuePtr,  
     SQLINTEGER   StringLength);  

Arguments

EnvironmentHandle
[Input] Miljöhantering.

Attribut
[Input] Attribut till set, listat i "Kommentarer."

ValuePtr
[Input] Peka på värdet som ska kopplas till Attribute. Beroende på värdet av Attribute kommer ValuePtr att vara ett 32-bitars heltalsvärde eller peka på en nullterminerad teckensträng.

StringLength
[Input] Om ValuePtr pekar på en teckensträng eller en binär buffert, bör detta argument vara längden på *ValuePtr. För teckensträngsdata bör detta argument innehålla antalet byte i strängen.

Om ValuePtr är ett heltal ignoreras StringLength .

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR eller SQL_INVALID_HANDLE.

Diagnostics

När SQLSetEnvAttr returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med en HandleType av SQL_HANDLE_ENV och ett Handle av EnvironmentHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLSetEnvAttr och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges. Om en drivrutin inte stöder ett miljöattribut kan felet endast returneras under anslutningstiden.

SQLSTATE Error Description
01000 Allmän varning Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
01S02 Alternativvärdet har ändrats Drivrutinen stödde inte det värde som specificerades i ValuePtr och ersatte ett liknande värde. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.)
HY000 Allmänt fel Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLGetDiagRec i *MessageText-bufferten beskriver felet och dess orsak.
HY001 Fel vid minnesallokering Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen.
HY009 Ogiltig användning av null-pekare Attributargumentet identifierade ett miljöattribut som krävde ett strängvärde, och argumentet ValuePtr var en nullpekare.
HY010 Funktionssekvensfel (DM) Ett anslutningshandtag har tilldelats på EnvironmentHandle.

(DM) SQL_ATTR_ODBC_VERSION har inte satts med SQLSetEnvAttr och Attribut är inte lika med SQL_ATTR_ODBC_VERSION. Du behöver inte sätta SQL_ATTR_ODBC_VERSION explicit om du använder SQLAllocHandleStd.
HY013 Minneshanteringsfel Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist.
HY024 Ogiltigt attributvärde Givet det angivna attributvärdet angavs ett ogiltigt värde i ValuePtr.
HY090 Ogiltig sträng- eller buffertlängd StringLength-argumentet var mindre än 0 men var inte SQL_NTS.
HY092 Ogiltig attribut-/optionsidentifierare (DM) Värdet som angavs för argumentattributet var inte giltigt för den version av ODBC som drivrutinen stödde.
HY117 Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion.
HYC00 Valfri funktion har inte implementerats Värdet som specificerades för argumentattributet Attribut var ett giltigt ODBC-miljöattribut för den version av ODBC som stöddes av drivrutinen, men stöddes inte av drivrutinen.

(DM) Attributargumentet var SQL_ATTR_OUTPUT_NTS, och ValuePtr var SQL_FALSE.

Comments

En applikation kan anropa SQLSetEnvAttr endast om inget anslutningshandtag är allokerat i miljön. Alla miljöattribut sätts framgångsrikt av applikationen för miljön tills SQLFreeHandle anropas i miljön. Mer än ett miljöhandtag kan allokeras samtidigt i ODBC 3.x.

Formatet på informationen som sätts genom ValuePtr beror på det specificerade attributet. SQLSetEnvAttr accepterar attributinformation i ett av två olika format: en nullterminerad teckensträng eller ett 32-bitars heltalsvärde. Formatet för varje anges i attributets beskrivning.

Det finns inga miljöattribut som är specifika för föraren.

Anslutningsattribut kan inte sättas genom ett anrop till SQLSetEnvAttr. Att försöka göra detta ger SQLSTATE HY092 (Ogiltig attribut-/alternatividentifierare).

Attribut ValuePtr-innehåll
SQL_ATTR_CONNECTION_POOLING (ODBC 3,8) Ett 32-bitars SQLUINTEGER-värde som möjliggör eller inaktiverar anslutningspoolning på miljönivå. Följande värden används:

SQL_CP_OFF = Anslutningspooling är avstängd. Det här är standardinställningen.

SQL_CP_ONE_PER_DRIVER = En enda anslutningspool stöds för varje drivrutin. Varje anslutning i en pool är kopplad till en drivrutin.

SQL_CP_ONE_PER_HENV = En enda anslutningspool stöds för varje miljö. Varje anslutning i en pool är kopplad till en miljö.

SQL_CP_DRIVER_AWARE = Använd drivrutinens anslutningspoolmedvetenhetsfunktion, om den är tillgänglig. Om drivrutinen inte stödjer anslutningspoolmedvetenhet ignoreras SQL_CP_DRIVER_AWARE och SQL_CP_ONE_PER_HENV används. För mer information, se Anslutningspool med drivarerkännande. I en miljö där vissa drivrutiner stödjer och andra inte stödjer anslutningspoolmedvetenhet kan SQL_CP_DRIVER_AWARE aktivera anslutningspoolmedvetenhet på dessa stödjande drivrutiner, men det är likvärdigt med att ställa in på SQL_CP_ONE_PER_HENV på de drivrutiner som inte stödjer anslutningspoolmedvetenhet.

Anslutningspoolning aktiveras genom att anropa SQLSetEnvAttr för att sätta attributet SQL_ATTR_CONNECTION_POOLING till SQL_CP_ONE_PER_DRIVER eller SQL_CP_ONE_PER_HENV. Det här anropet måste göras innan programmet allokerar den delade miljö som anslutningspooler ska aktiveras för. Miljöhandtaget i anropet till SQLSetEnvAttr är satt till null, vilket gör SQL_ATTR_CONNECTION_POOLING till ett processnivåattribut. Efter att connection pooling aktiverats allokerar applikationen sedan en implicit delad miljö genom att anropa SQLAllocHandle med argumentet InputHandle satt till SQL_HANDLE_ENV.

Efter att anslutningspooling har aktiverats och en delad miljö har valts för en applikation kan SQL_ATTR_CONNECTION_POOLING inte återställas för den miljön, eftersom SQLSetEnvAttr anropas med ett null-miljöhandtag när detta attribut sätts. Om detta attribut sätts medan anslutningspoolning redan är aktiverad i en delad miljö, påverkar attributet endast delade miljöer som tilldelas därefter.

Det är också möjligt att aktivera anslutningspoolning i en miljö. Observera följande om miljöanslutningspooling:

- Att aktivera anslutningspoolning på ett NULL-handtag är ett processnivåattribut. Därefter kommer tilldelade miljöer att vara en delad miljö och ärva processnivåns anslutningspooling.
- Efter att en miljö har allokerats kan en applikation fortfarande ändra sin anslutningspoolinställning.
- Om miljöanslutningspooling är aktiverad och anslutningens drivrutin använder drivrutinspooling, prioriteras miljöpooling.

SQL_ATTR_CONNECTION_POOLING implementeras i Driver Manager. En drivrutin behöver inte implementera SQL_ATTR_CONNECTION_POOLING. ODBC 2.0- och 3.0-applikationer kan sätta detta miljöattribut.

Mer information finns i ODBC-anslutningspooler.
SQL_ATTR_CP_MATCH (ODBC 3.0) Ett 32-bitars SQLUINTEGER-värde som avgör hur en anslutning väljs från en anslutningspool. När SQLConnect eller SQLDriverConnect anropas avgör Driver Manager vilken anslutning som återanvänds från poolen. Driver Manager försöker matcha anslutningsalternativen i samtalet och anslutningsattributen som applikationen sätter med nyckelorden och anslutningsattributen för anslutningarna i poolen. Värdet på denna attribut avgör precisionsnivån för matchningskriterierna.

Följande värden används för att sätta värdet på detta attribut:

SQL_CP_STRICT_MATCH = Endast anslutningar som exakt matchar anslutningsalternativen i samtalet och de anslutningsattribut som applikationen ställt in återanvänds. Det här är standardinställningen.

SQL_CP_RELAXED_MATCH = Kopplingar med matchande reťazec pripojenia nyckelord kan användas. Nyckelord måste matcha, men inte alla anslutningsattribut måste stämma överens.

För mer information om hur Driver Manager utför matchningen vid anslutning till en poolad anslutning, se SQLConnect. Mer information om anslutningspooler finns i ODBC-anslutningspooler.
SQL_ATTR_ODBC_VERSION (ODBC 3.0) Ett 32-bitars heltal som avgör om viss funktionalitet uppvisar ODBC 2.x-beteende eller ODBC 3.x-beteende . Följande värden används för att sätta värdet på detta attribut:

SQL_OV_ODBC3_80 = Driver Manager och driver uppvisar följande ODBC 3.8-beteende:

- Föraren returnerar och förväntar sig ODBC 3.x-koder för datum, tid och tidsstämpel.
- Drivrutinen returnerar ODBC 3.x SQLSTATE-koder när SQLError, SQLGetDiagField eller SQLGetDiagRec anropas.
- CatalogName-argumentet i ett anrop till SQLTables accepterar ett sökmönster.
- Driver Manager stöder utbyggbarhet av C-datatypen. För mer information om utbyggbarhet av C-datatyper, se C Data Types i ODBC.

För mer information, se Vad som är nytt i ODBC 3.8.

SQL_OV_ODBC3 = Driver Manager och driver uppvisar följande ODBC 3.x-beteende :

- Föraren returnerar och förväntar sig ODBC 3.x-koder för datum, tid och tidsstämpel.
- Drivrutinen returnerar ODBC 3.x SQLSTATE-koder när SQLError, SQLGetDiagField eller SQLGetDiagRec anropas.
- CatalogName-argumentet i ett anrop till SQLTables accepterar ett sökmönster.
- Driver Manager stöder inte C-datatyputbyggbarhet.

SQL_OV_ODBC2 = Driver Manager och driver uppvisar följande ODBC 2.x-beteende . Detta är särskilt användbart för en ODBC 2.x-applikation som arbetar med en ODBC 3.x-drivrutin .

- Föraren returnerar och förväntar sig ODBC 2.x-koder för datum, tid och tidsstämpel.
- Drivrutinen returnerar ODBC 2.x SQLSTATE-koder när SQLError, SQLGetDiagField eller SQLGetDiagRec anropas.
- CatalogName-argumentet i ett anrop till SQLTables accepterar inte ett sökmönster.
- Driver Manager stöder inte C-datatyputbyggbarhet.

En applikation måste sätta detta miljöattribut innan den anropar någon funktion som har ett SQLHENV-argument, annars returnerar anropet SQLSTATE HY010 (funktionssekvensfel). Det är förarspecifikt om ytterligare beteende finns för dessa miljöflaggor.

- För mer information, se Deklaration av applikationens ODBC-version och beteendeförändringar.
SQL_ATTR_OUTPUT_NTS (ODBC 3.0) Ett 32-bitars heltal som bestämmer hur drivrutinen returnerar strängdata. Om SQL_TRUE returnerar drivrutinen strängdata som är nullterminerade. Om SQL_FALSE returnerar drivrutinen inte strängdata som är nullterminerade.

Denna attribut är som standard SQL_TRUE. Ett anrop till SQLSetEnvAttr för att ställa in det till SQL_TRUE returnerar SQL_SUCCESS. Ett anrop till SQLSetEnvAttr för att ställa in det till SQL_FALSE returnerar SQL_ERROR och SQLSTATE HYC00 (Valfri funktion ej implementerad).
Mer information om Se
Allokering av ett handtag SQLAllocHandle-funktionen
Återställer inställningen av ett miljöattribut SQLGetEnvAttr-funktionen