PRB: 80020009 greška prilikom preuzimanja podataka iz SQL-a

Simptomi

Do sledeće greške dolazi kada pristupate skupu zapisa u datoteci aktivnog servera (ASP) koja sadrži podatke "tekst" ili "Blob" iz SQL tabele:

Microsoft OLE DB dobavljač za ODBC upravljačke programe greška "80020009"

Uzrok

Do sledećeg uslova može doći do greške:

Polja tipa "tekst/Blob" su izabrana u redosledu koji prethodi drugim tipovima polja.

Rešenje

Kada se radi sa BLOB poljima sa Microsoft SQL servera, morate ih staviti desno od neblob kolona u skupu rezultata. Da biste bili bezbedni, trebalo bi da pročitate i kolone u redosledu sleva nadesno, pa ako imate dve BLOB kolone kao poslednje dve kolone u skupu rezultata, pročitajte prvu, a zatim drugu. Nemojte ih čitati u obrnutom redosledu. Da biste prikazali tačan redosled izbora polja Kreirajte novu ASP stranicu u projektu Visual InterDev i nalepite sledeći kôd na praznu ASP stranicu. Izmenite nisku veze da biste se povezali sa SQL serverom:Imajte na umu da morate promeniti korisničko ime =<username> i PWD =<snažnu lozinku> tačne vrednosti pre nego što pokrenete ovu šifru. Uverite se da ID korisnika ima odgovarajuće dozvole za izvođenje ove operacije na bazi podataka.

   <%@ Language=VBScript %>   <HTML>   <BODY bgcolor=white>   <%      Set cn = Server.CreateObject("ADODB.Connection")      Set rs = Server.CreateObject("ADODB.Recordset")      'Open the connection.      cn.Open "dsn=yoursystemdsn;Username=<username>;PWD=<strong password>;database=pubs;"      'Open the recordset.      'Notice that the Blob field, pr_info, is last in the field order.      rs.Open "select pub_id, pr_info from pub_info", cn      While Not rs.EOF         Response.Write "<P>PR Info:<P>" & rs("pr_info")         Response.Write "<P>That was the PR Info for PubID " &                           rs("pub_id")         rs.MoveNext      Wend   %>   </BODY>   </HTML>

Status

Ovo ponašanje je po dizajnu. Međutim, to se ne dešava kada koristite MDAC 2.1 SP2 ili noviji sa 3,7 upravljačkim programom ili novijim za SQL Server. najnoviju verziju Microsoft Data Access komponenti možete preuzeti sa sledeće Microsoft Web lokacije:

Više informacija

SQL Server šalje nazad podatke na žicu, a klijent u suštini dobija tok BITS pročitanih uzastopnim redom na mrežnoj žičani. Sa povezanim kolonama (odnosno, vrednosti se mogu kopirati u lokalni memorijski baferi, a keširana u njemu), upravljački program prenosi podatke u te kolone u bafere memorije. Kada se podaci nalaze u lokalnom baferi, možete čitati podatke po bilo kom redosledu. Zbog toga možete da pročitate kolone rezultata u bilo kom redosledu kada su sve kolone povezane (a ne BLOBs). Kada uključite BLOB kolone, dužina kolone može da bude približno 2 gigabajta, a biblioteke podataka za pristup podacima obično ne mogu da se priključe sa tim kolonama pošto upravljački program često ne može da odredi koliko je taj BLOB bio u potpunosti dok se ne preuzme. Osim toga, biblioteke za pristup podacima obično izbegavaju keširanje podataka sa keširanja jer to može da konzumira veliku količinu memorije i da ih keširanje i u biblioteci podataka za pristup podacima, a vaša aplikacija nije efikasna. Ako se od upravljačkog programa za pristup podacima zahteva da vrati sadržaj BLOB kolone, on obično odbacuje nepovezane kolone koje prethode zahtevanoj BLOB koloni, pošto mora da preuzme sekvencijalni tok podataka pre nego što pročita zahtevanu kolonu. Zbog toga je efikasnije čitati vaše rezultata koji su postavljeni sleva nadesno, a koji odgovara načinu preuzimanja podataka. Imajte na umu da ovo opisuje ponašanje SQL servera. Oracle i drugi klijent/server DBMSs mogu da urade istu stvar, ali to nije obavezno. Možda je bolja alternativa da biste izbegli korišćenje tekstualne kolone. Pošto SQL Server izdvaja prostor u 2K Chunks, korišćenje tekstualnih kolona može rezultirati neefikasnom upotrebom prostora za skladištenje ako je dužina teksta veoma mala. Vreme pravljenja rezervne kopije je takođe uticalo zato što je potrebno više da se izbaci iz evidencije transakcija. Često je bolje kreirati drugu tabelu koja ima PK od postojeće tabele, kolonu sa brojem dela i VARCHAR (255) kolonu. Podelite tekst na broj koji je potreban za više od 255 znakova i umetnite onoliko redova u novu tabelu u kojoj se nalaze šunks. Obično je vredno dodatnog vremena za kodiranje, pošto efikasnije korišćenje prostora za skladištenje i pravljenje rezervnih kopija ide mnogo brže.

Potrebna vam je dodatna pomoć?

Unapredite veštine
Istražite obuku
Prvi nabavite nove funkcije
Pridružite se Microsoft insajdere

Da li su vam ove informacije koristile?

Hvala vam na povratnim informacijama!

Hvala za povratne informacije! Izgleda da će biti od pomoći ako vas povežemo sa našim agentima Office podrške.

×