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.