**************************************************************** MICROSOFT SQL SERVER VIGTIGT.FIL TIL INSTALLATION AF MICROSOFT SQL SERVER ODBC-DRIVER VERSION 3.7 **************************************************************** Denne fil beskriver brugen af Microsoft SQL Server ODBC-driveren version 3.7 med Microsoft SQL Server version 6.5 eller tidligere. Da Microsoft SQL Server ODBC-driveren version 3.7 leveres med SQL Server 7.0, henvises brugere af SQL Server 7.0 til dokumentationen til SQL Server 7.0 for denne driver i stedet for dokumentationen i denne Vigtigt-fil. De omhandlede emner er: 1. Oversigt 2. Installere Instcat.sql på serveren 3. Hente SQL Server-klientnetbiblioteker 4. Dokumentationskilder vedrørende brugen af ODBC med SQL Server 5. Bruge driveren i et udviklingsmiljø 6. Kompatibilitetsproblemer **************************************************************** 1. Oversigt SQL Server ODBC-driveren version 3.7 er en Win32ODBC-driver i version 3.51. Den kan bruges med programmer skrevet til enten ODBC 2.X eller ODBC 3.X API'erne. Driveren fungerer med SQL Server version 4.21a eller senere. Driveren kører under Windows 98, Windows 95 eller Windows NT (version 4.0 eller senere). Et Win32 SQL Server 7.0 Client Network-værktøj er også installeret med SQL Server ODBC-driveren version 3.7. Værktøjet SQL Server Client Network kan benyttes sammen med SQL Server version 4.21a eller senere og de klientnetbiblioteker, som følger med disse versioner af SQL Server. **************************************************************** 2. Installere Instcat.sql på serveren SQL Server ODBC-driveren bruger et sæt systemgemte procedurer, kendt som kataloggemte procedurer, til at hente oplysninger fra systemkataloget i SQL Server. Hver version af SQL Server ODBC-driveren er udviklet til at arbejde med en bestemt version af de kataloggemte procedurer. Filen Instcat.sql, medtaget i version 3.7 af SQL Server ODBC-driveren indeholder mindre opdateringer af de kataloggemte procedurer, der opgraderer procedurerne til de versioner, der bruges af denne driver. Filen Instcat.sql, der følger med SQL Server ODBC-driveren version 3.7 er den samme som den Instcat.sql-fil, der fulgte med SQL Server 7.0. Benyttes SQL Server 7.0, er det ikke nødvendigt at køre Instcat.sql. Systemadministratoren af SQL Server skal bruge scriptet Instcat.sql til at opgradere de kataloggemte procedurer for at sikre, at driveren virker korrekt. Opgradering af de kataloggemte procedurer påvirker ikke virkemåden af ældre SQL Server-klienter. Dette skal gøres for alle versioner af Microsoft SQL Server fra 4.21a til 6.5. Denne opgradering er ikke nødvendig, hvis du har SQL Server 7.0. For at opgradere de kataloggemte procedurer på SQL Server 4.21a, 6.0 eller 6.5 kører systemadministratoren scriptet Instcat.sql, der bruger værktøjet isql (se instruktionerne herunder). Før der foretages ændringer i masterdatabasen, bør systemadministratoren sikkerhedskopiere den. For at køre isql skal computeren være installeret som en klientarbejdsstation til SQL Server. Brug isql-værktøjet ved kommandoprompten for at køre scriptet Instcat.sql. Eksempel: C:>ISQL /Usa /Psa_password /Sserver_name /ilocation\Instcat.Sql hvor sa_password er systemadministratorens adgangskode. server_name er navnet på den server, hvor SQL Server er placeret. location er den fulde sti til placeringen af Instcat.Sql. Scriptet Instcat.sql genererer mange meddelelser. De fleste angiver, hvor mange rækker der blev påvirket af Transact-SQL- sætninger afgivet af scriptet. De fleste af disse meddelelser kan ignoreres, selvom outputtet bør skannes for meddelelser, der angiver en afviklingsfejl. Når Instcat.sql køres på version 6.0 af SQL Server, kan meddelelsen om, at objektet sp_MS_upd_sysobj_category ikke eksisterer, ignoreres. Den sidste meddelelse skal angive, at Instcat.sql blev gennemført. Scriptet Instcat.sql mislykkes, når der ikke er tilstrækkelig plads i masterdatabasen til at lagre de kataloggemte procedurer eller til at registrere ændringerne af eksisterende procedurer. **************************************************************** 3. Hente SQL Server-klientnetbiblioteker SQL Server ODBC-driveren bruger SQL Server-klientnetbiblioteker til at kommunikere med serveren. Version 3.7 af SQL Server ODBC-driveren bruger også værktøjet SQL Server Client Configuration til at håndtere det netbibliotek, der er tilknyttet en ODBC-datakilde. Version 3.7 af SQL Server ODBC-driveren installerer kun et netbibliotek, det Win32-navngivne pipe-netbibliotek Dbnmpntw.dll. Du kan bruge version 3.7 af SQL Server ODBC-driveren med ældre Win32-netbiblioteker. Hvis et andet netbibliotek end det navngivne pipe-netbibliotek er nødvendigt for at etablere forbindelse til SQL Server, kan du bruge det netbibliotek, der fulgte med din version af SQL Server. Du kan få SQL Server- netbiblioteker ved at installere værktøjerne Win32 SQL Server Client til din version af SQL Server. Den version af værktøjet SQL Server Client Network, der er installeret med version 3.7 af SQL Server ODBC-driveren, kan bruges med klientnetbiblioteker fra SQL Server 4.21a eller senere. **************************************************************** 4. Dokumentationskilder vedrørende brugen af ODBC med SQL Server Version 3.7 af Microsoft SQL Server ODBC-driveren er den samme driver, som leveres med SQL Server 7.0. Brugere af SQL Server 7.0 henvises til dokumentationen til SQL Server 7.0 for SQL Server ODBC-driveren version 3.7 Når SQL Server ODBC-driveren version 3.7 bruges med SQL Server (version 4.21a, 6.0 eller 6.5), fungerer driveren på samme måde som de ældre drivere. Du kan derfor bruge de driverspecifikke oplysninger, som fulgte med denne version of SQL Server. Disse omfatter: * Filen drvssrvr.hlp, som fulgte med den tidligere version af SQL Server. * Afsnittet "Programming ODBC for Microsoft SQL Server" i håndbøgerne til SQL Server 6.5. * Hvidbogen "Using ODBC with Microsoft SQL Server", der kan fås på MSDN. Version 3.7 af Microsoft SQL Server ODBC-driveren overholder også yderligere driverspecifikke oplysninger i den tekniske bemærkning "Using ODBC with Microsoft SQL Server", som kan hentes på MSDK. Filen Sqlsodbc.hlp, der følger med version 3.7 af SQL Server ODBC-driveren, indeholder kun kontekstsensitiv hjælp til guiden SQL Server ODBC Datakilde. Filen Drvssrvr.hlp, der fulgte med tidligere versioner af SQL Server ODBC-driveren, indeholdt driverspecifikke oplysninger til ældre versioner af driveren. Oplysningerne i de ældre versioner af Drvssrvr.hlp er gengivet i håndbogen til SQL Server 6.5 "Programming ODBC for Microsoft SQL Server." **************************************************************** 5. Bruge driveren i et udviklingsmiljø SQL Server ODBC-driveren bruger driverspecifikke parametre til flere ODBC-funktionskald. Definitioner for disse driverspecifikke parametre og driverspecifikke C- og C++- programmeringsstrukturer er indeholdt i filen Odbcss.h. SQL Server ODBC-driveren version 3.7 fungerer med filen Odbcss.h, der findes i følgende kilder: * SQL Server 7.0 * SQL Server 6.5 Service Pack 2 (SP2) eller senere * MDAC SDK MDAC SDK er en del af Microsoft Developer Network Professional. SDK kan også hentes Microsoft Web-stedet på www.microsoft.com/data. SDK kan også få fra Microsoft Press i "Microsoft ODBC 3.0 Software Development Kit and Programmer's Reference". **************************************************************** 6. Kompatibilitetsproblemer Eftersom ODBC-driveren version 3.7 følger med SQL Server 7.0, henvises brugere af SQL Server 7.0 til dokumentationen til ODBC i SQL Server 7.0. Kompatibilitetsproblemer dokumenteret i dette afsnit gælder kun, når denne driver kører med tidligere versioner af SQL Server (4.21a, 6.0 og 6.5). SQL Server ODBC-driveren version 3.7 indeholder en ny guide, når datakilder tilføjes eller konfigureres i enten værktøjet ODBC- administrator, eller når et program kalder SQLConfigDataSource og beder driveren om at spørge brugeren om oplysninger. Klik på knappen Hjælp i guiden for at få adgang til dokumentationen til guiden. I version 2.65 af SQL Server ODBC-driveren, der fulgte med SQL Server 6.5, arbejdede SQL_COPT_SS_PERF_QUERY_INTERVAL i sekunder i stedet for millisekunder som angivet i dokumentationen (se Knowledge Base artikel Q157753). I version 3.7 af SQL Server ODBC-driveren er SQL_COPT_SS_PERF_QUERY_INTERVAL ændret til at arbejde i millisekunder som angivet i dokumentationen. Følgende ændringer påvirker kun programmer skrevet med ODBC 3.X API. De påvirker ikke programmer skrevet med ODBC 2.X API. Disse ændringer bør ikke påvirke behandlingen af resultatet i de fleste ODBC-programmer. I tidligere versioner af SQL Server ODBC-driveren, returnerer sammenhængende PRINT- eller RAISERROR-sætninger i et bundt eller i en gemt procedure deres meddelelser sammen i ét resultatsæt. I version 3.7 af SQL Server ODBC-driveren returneres meddelelserne for hver SQL-sætning som separate resultatsæt. Du skal kalde SQLMoreResults mellem hver meddelelse, der skal placeres på meddelelsen for den næste SQL-sætning. Meddelelser fra en enkelt SQL-sætning, f.eks. en DBCC-sætning, returneres alle i et enkelt resultatsæt, og det er ikke nødvendigt at kalde SQLMoreResults mellem hver meddelelse. I tidligere versioner af SQL Server ODBC-driveren medførte en kørselsfejl eller en RAISERROR med prioritering på 11 eller højere på den første sætning i et bundt eller i en gemt procedure altid, at enten SQLExecute, SQLExecDirect eller SQLParamData returnerede SQL_ERROR. I version 3.7 af SQL Server ODBC-driveren returnerer SQLExecute, SQLExecDirect eller SQLParamData kun SQL_ERROR, hvis ingen andre sætninger afvikles efter den første sætning. Hvis andre sætninger afvikles efter den første, selv en simpel RETURN-sætning uden returværdi, returnerer SQLExecute eller SQLExecDirect SQL_SUCCESS_WITH_INFO. Efter behandling af SQL_SUCCESS_WITH_INFO-meddelelserne med SQLGetDiagRec, skal SQLMoreResults kaldes for at blive placeret på det næste resultatsæt. Når tidligere versioner af driveren stødte på en fejl i den første sætning i et bundt eller en gemt procedure, kunne sætningens handle bruges med en anden SQL-sætning, efter SQLExecute eller SQLExecDirect returnerede SQL_ERROR. Når version 3.7 af driveren returnerer SQL_SUCCESS_WITH_INFO, er sætningen ikke fri til at behandle en anden SQL-sætning, før SQLMoreResults returnerer SQL_NO_DATA, eller før alle resultatsæt, der følger efter RAISERROR, er blevet lukket. Hvis der ikke følger et resultatsæt efter fejlmeddelelsen, kan SQLCloseCursor ikke kaldes. SQLFreeStmt(SQL_CLOSE) eller SQLMoreResults skal kaldes for at frigøre sætningens handle til at behandle en anden SQL-sætning: CREATE PROCEDURE TestPrc @Parm1 as IF (@Parm1 IS NULL) BEGIN RAISERROR ('Parm1 cannot be NULL', 11, 1) RETURN END SELECT * FROM sysusers WHERE suid = @Parm1 GO Udfør følgende: SQLExecDirect(hstmt, "{ call TestPrc (NULL) }", SQL_NTS); Hvis en ældre version af SQL Server ODBC-driveren bruges, eller hvis programmet benytter ODBC 2.X API, returnerer SQLExecDirect SQL_ERROR. Efter SQLGetDiagRec returnerer SQL_NO_DATA, eller SQLError returnerer SQL_NO_DATA_FOUND, er sætningens handle fri til at udføre en anden SQL-sætning. Ved brug af version 3.7 af SQL Server ODBC-driveren fra et program skrevet til ODBC 3.X API returnerer SQLExecDirect SQL_SUCCESS_WITH_INFO. Efter SQLGetDiagRec returnerer SQL_NO_DATA, kan sætningens handle ikke bruges til at behandle en anden SQL-sætning, før SQLMoreResults returnerer SQL_NO_DATA, eller SQLFreeStmt(SQL_CLOSE) kaldes. I tidligere versioner af SQL Server ODBC-driveren returnerer SQLExecute, SQLExecDirect eller SQLParamData SQL_SUCCESS, når et program afvikler en UPDATE- eller DELETE-sætning, der er søgt efter, og som ikke påvirker nogen rækker. I dette tilfælde returnerer version 3.7 af driveren stadig SQL_SUCCESS til programmer skrevet med ODBC 2.X API, men den returnerer SQL_NO_DATA til programmer skrevet med ODBC 3.X API. Hvis enten det ODBC 2.X- program, der modtager SQL_SUCCESS, eller det ODBC 3.X- program, der modtager SQL_NO_DATA, derefter kalder SQLRowCount, returnerer SQLRowCount en optælling på nul. ODBC 3.X definerer mere klart den måde, resultater returneres på, end ODBC 2.X. Tidligere versioner af SQL Server ODBC-driveren returnerede outputparametres og returkoders værdier, når ODBC 2.X-funktionerne SQLFetch eller SQLExtendedFetch returnerede SQL_NO_DATA på det sidste resultatsæt returneret af en gemt procedure. Version 3.7 af SQL Server ODBC-driveren bevarer denne virkemåde, når den kaldes af ODBC 2.X-programmer. Når version 3.7 af SQL Server ODBC-driveren derimod kaldes af ODBC 3.X-programmer, returnerer driveren ikke outputparametre eller returkoder, før SQLMoreResults returnerer SQL_NO_DATA. ****************************************************************