Sammendrag

OLE-automatisering lagret prosedyrer trenger ubegrenset tilgang til objektene de vil starte for å fungere. Følgende feil kan vanligvis vises når uløste problemer med målobjektet beholdes:

[Microsoft] [ODBC SQL Server Driver] Protokollfeil i TDS strøm
[Microsoft] [ODBC SQL Server Driver] Feil ved funksjonsrekkefølgen

Hvis du vil ha mer informasjon

Når dette skjer, kan det være flere underliggende problemene skjer samtidig. Først og fremst tabelldata stream (TDS)-feil i de fleste tilfeller er en generell feil, og med mindre du skal også arbeide med Remote Data Service (RDS)-implementeringen, dette vil ikke være en veldig tydelig peker til kilden til problemet. Hvis du vil utvide feilinformasjon som returneres, må du erstatte sp_oageterrorinfo-kall med et kall til sp_displayoaerrorinfo. For å få tilgang til denne informasjonen først må du kompilere de to ganske nyttig lagrede prosedyrene nevnt i følgende artikkel i SQL Server 7.0 Books Online:


OLE Automation Return Codes and Error Information
Artikkelen forklarer også i detalj hvorfor disse lagrede prosedyrer er nødvendig for å trekke mer brukbar informasjon som ikke er omhandlet i denne artikkelen.

Når du har kompilert de lagrede prosedyrene, gir feilene ovenfor deg mye mer brukbare informasjon, som vist i følgende kodebit som bruker den endrede feilbehandling til å gi oss mye mer interessant utdata:

DECLARE @object int
DECLARE @hr int

EXEC @hr = sp_OACreate 'Nic.cls', @object OUTPUT
IF @hr <> 0
BEGIN
EXEC sp_displayoaerrorinfo @object, @hr
-- EXEC sp_OAGetErrorInfo @object
RETURN
END

Vi får med sp_displayoaerrorinfo-kallet aktivert i dette tilfellet ser slik ut:

Feilinformasjon for OLE-automatisering
HRESULT: 0X800401F3
Kilde: ODSOLE utvidet prosedyre
Beskrivelse: Ugyldig klasse-streng

I dette eksemplet ser vi at "Ugyldig klassestreng" feilen kan tyde på at ProgID eller CLSID (Nic.cls i eksemplet ovenfor) som er angitt i sp_oacreate-kallet ikke er riktig registrert som et OLE-objekt i SQL Server. I vårt eksempel er dette faktisk tilfelle fordi Nic.cls er en fiktiv objekt.

Hvis du vil ha mer informasjon om disse typer feil, kan du ta en titt i dokumentasjonen for sp_oaGetErrorInfo-kallet i SQL Server Books Online.

Hvis du vil se litt mer på hva som skjer her, legger du til "Velg @hr" mellom Hvis og Start-setninger i koden på denne måten:

DECLARE @oFTP int
DECLARE @hr int
DECLARE @vvar varchar(255)
DECLARE @vout int
EXEC @hr = sp_OACreate 'Nic.Inet', @object OUTPUT
SELECT @hr
IF @hr <> 0
BEGIN
EXEC sp_displayoaerrorinfo @object, @hr
-- EXEC sp_OAGetErrorInfo @object
RETURN
END

Dette returnerer følgende feilinformasjon som tidligere har aktivert:


-----------
-2147221005

(1 row(s) affected)

Feilinformasjon for OLE-automatisering
HRESULT: 0X800401F3
Kilde: ODSOLE utvidet prosedyre
Beskrivelse: Ugyldig klasse-streng

Vær oppmerksom på at det kan være nærliggende å bare legge til en @hr EXEC sp_OAGetErrorInfo @object samtalen, som hvis prøvde virkelig vil returnere false suksess i et "kommandoen er fullført" resultat. Dette er faktisk imidlertid ikke hva vi vil, fordi vi trenger å vite hvorfor vi får en ikke-null resultat for @hr i koden.




Obs! Hvis du bruker Microsoft SQL Server 2005, må du kanskje endre litt denne koden. Hvis du vil ha mer informasjon, se emnet "OLE-automatisering returnerer koder og feilinformasjon" i SQL Server 2005 Books Online.

Trenger du mer hjelp?

Utvid ferdighetene dine
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Microsoft Insiders

Var denne informasjonen nyttig?

Hvor fornøyd er du med språkkvaliteten?
Hva påvirket opplevelsen din?

Takk for tilbakemeldingen!

×