Suvestinė

"OLE Automation" saugomos procedūros turi neribojamą prieigą prie objektų, kuriuos norite naudoti, kad tinkamai veiktų. Paprastai toliau pateiktas klaidas galima pastebėti, kai neišspręstos paskirties objekto problemos išlieka:

Microsoft [ODBC SQL serverio tvarkyklė] "Office Stream" protokolo klaida [Microsoft] [ODBC SQL serverio tvarkyklė] funkcijų sekos klaida

Daugiau informacijos

Kai taip nutinka, vienu metu gali būti kelios problemos. Visų pirma lentelių duomenų srauto (TDS) klaida yra Didžioji dalis bendrosios klaidos, o jei nedirbate su nuotolinės duomenų tarnybos (RDS) įgyvendinimu, tai nebus labai aiškus žymiklio šaltinis. Kad būtų galima papildyti grąžinamą klaidos informaciją, reikia pakeisti sp_oageterrorinfo skambutį skambučiu į sp_displayoaerrorinfo. Norėdami pasiekti šią papildomą informaciją, pirmiausia turite parengti dvi gana patogus saugomas procedūras, paminėtas šiame "SQL Server" 7,0 knygų internetiniame straipsnyje: OLE Automation Return Codes and Error Information Šiame straipsnyje taip pat išsamiai paaiškinama, kodėl šios saugomos procedūros reikalingos norint išgauti papildomą informaciją, kuri šiame straipsnyje nėra aptariama. Kai sukompiliavote saugomas procedūras, ankstesnės klaidos suteiks jums daug daugiau naudingos informacijos, kaip parodyta toliau pateiktame kodo fragmente, kuriame naudojamas modifikuotas klaidų apdorojimas, kad būtų suteikta daug įdomesnės išvesties:

DECLARE @object intDECLARE @hr intEXEC @hr = sp_OACreate 'Nic.cls', @object OUTPUTIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--  EXEC sp_OAGetErrorInfo @object    RETURNEND

Ką mes gauname su įjungtu sp_displayoaerrorinfo skambučiu šiame egzemplioriuje atrodo taip:

OLE automatizavimo klaidos informacija HRESULT: 0x800401f3 šaltinis: ODSOLE Išplėstinė procedūra aprašas: neleistina klasės eilutė

Šiame pavyzdyje matome, kad klaida "neleistina klasės eilutė" gali nurodyti, kad ProgID arba CLSID (NIC. CLS ankstesniame pavyzdyje) buvo pažymėti sp_oacreate kvietime nebuvo sėkmingai užregistruotas kaip OLE objektas "SQL Server". Mūsų pavyzdyje tai iš tikrųjų yra atvejis, nes NIC. CLS yra fiktyvus objektas. Jei norite gauti daugiau informacijos apie šių tipų klaidas, peržiūrėkite sp_oaGetErrorInfo skambučio dokumentus "SQL Server" knygose Online.In, kad matytumėte šiek tiek daugiau apie tai, kas čia vyksta, įtraukite "Select @hr" tarp IF ir pradžios teiginių, pvz.:

DECLARE @oFTP intDECLARE @hr int  DECLARE @vvar varchar(255)DECLARE @vout intEXEC @hr = sp_OACreate 'Nic.Inet', @object OUTPUTSELECT @hrIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--   EXEC sp_OAGetErrorInfo @object    RETURNEND

Ši funkcija pateikia šią klaidos informaciją, kaip įgalinta anksčiau:------------2147221005(1 row(s) affected)

OLE automatizavimo klaidos informacija HRESULT: 0x800401f3 šaltinis: ODSOLE Išplėstinė procedūra aprašas: neleistina klasės eilutė

Reikia pažymėti, kad gali būti viliojantis, kad tiesiog įtrauktumėte @hr į EXEC sp_OAGetErrorInfo @object skambutį, kuris, jei bandytų iš tiesų pateiks klaidingą sėkmę "komanda sėkmingai baigtu" rezultatu. Tačiau tai yra ne tai, ko mums reikia, nes mes turime žinoti, kodėl mes gauname ne nulis rezultatas @hr kodą.Pastaba Jei naudojate "Microsoft SQL Server" 2005, gali tekti šiek tiek pakeisti šį kodą. Daugiau informacijos ieškokite temoje "OLE automatikos grąžinimo kodai ir klaidos informacija" SQL Server 2005 Books Online.

Reikia daugiau pagalbos?

Tobulinkite savo įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijungti prie "Microsoft Insider"

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?

Dėkojame už jūsų atsiliepimus!

×