PRB: kesalahan 80020009 saat mengambil data dari SQL

Gejala

Kesalahan berikut ini terjadi ketika mengakses set rekaman di file Active server Pages (ASP) yang berisi "teks" atau "Blob" tipe data dari tabel SQL:

Microsoft OLE DB penyedia untuk kesalahan driver ODBC ' 80020009 '

Penyebab

Kondisi berikut ini mungkin menyebabkan kesalahan terjadi:

Bidang teks/Blob dipilih dalam urutan yang mendahului tipe bidang lain.

Pemecahan Masalah

Ketika berhadapan dengan bidang BLOB dari Microsoft SQL Server, Anda harus menempatkannya di sebelah kanan kolom non-BLOB dalam resultset. Agar aman, Anda juga harus membaca kolom dalam urutan kiri-ke-kanan, jadi jika Anda memiliki dua kolom BLOB sebagai dua kolom terakhir dalam resultset Anda, baca yang pertama lalu yang kedua. Jangan membacanya dalam urutan terbalik. Untuk menunjukkan urutan yang benar dari pemilihan bidang Buat halaman ASP baru dalam proyek InterDev visual dan tempelkan kode berikut di halaman ASP kosong. Mengubah string koneksi untuk menyambungkan ke server SQL Anda:catatan Anda harus mengubah nama pengguna =<nama pengguna> dan PWD =<kata sandi yang kuat> ke nilai yang benar sebelum Anda menjalankan kode ini. Pastikan bahwa ID pengguna memiliki izin yang sesuai untuk menjalankan operasi ini di database.

   <%@ 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

Perilaku ini merupakan bagian dari rancangan program. Namun, tidak terjadi ketika menggunakan MDAC 2.1 SP2 atau yang lebih baru dengan driver 3,7 atau yang lebih baru untuk SQL Server. Anda bisa mengunduh versi terbaru komponen Microsoft Data Access dari situs web Microsoft berikut ini:

Informasi Selengkapnya

SQL Server mengirimkan kembali data pada kabel dan klien pada dasarnya menerima aliran bit yang dibaca secara berurutan pada kabel jaringan. Dengan kolom terikat (yaitu, nilai bisa disalin ke buffer memori lokal dan singgahan), driver mentransfer data di kolom tersebut ke buffer memori. Setelah data berada di buffer lokal, Anda dapat membaca data dalam urutan apa pun. Oleh karena itu, Anda bisa membaca kolom hasil dalam urutan apa pun saat semua kolom terikat (bukan gumpalan). Saat Anda menyertakan kolom BLOB, panjang kolom bisa sekitar 2 gigabyte dan pustaka akses data biasanya tidak mengikat kolom tersebut karena driver sering tidak dapat menentukan dengan tepat seberapa besar BLOB hingga diperoleh. Selain itu, pustaka akses data biasanya menghindari data BLOB caching karena ini mungkin mengonsumsi memori dalam jumlah besar dan melakukan caching pada pustaka akses data dan aplikasi Anda tidak efisien. Jika driver akses data diminta untuk mengembalikan konten kolom BLOB, maka biasanya membuang kolom yang tidak terikat yang mendahului kolom BLOB yang diminta, karena harus mengambil aliran data berurutan sebelum bisa membaca kolom yang diminta. Oleh karena itu, lebih efisien untuk membaca resultset dari kiri-ke-kanan karena yang sesuai dengan cara data diambil. Perhatikan bahwa ini menjelaskan perilaku SQL Server. Oracle dan klien lainnya/server DBMSs mungkin melakukan hal yang sama, tetapi tidak diperlukan. Mungkin alternatif yang lebih baik adalah menghindari penggunaan kolom teks. Karena SQL Server mengalokasikan ruang dalam 2K, menggunakan kolom teks mungkin tidak efisien jika panjang teks sangat kecil. Waktu cadangan juga terpengaruh karena memerlukan waktu lebih lama untuk membuang log transaksi. Seringkali lebih baik membuat tabel lain yang memiliki PK dari tabel yang sudah ada, kolom angka potongan, dan kolom varchar (255). Membagi teks ke dalam sebanyak 255 potongan karakter yang diperlukan dan menyisipkan sebanyak baris dalam tabel baru karena ada potongan. Biasanya bernilai waktu pengkodean tambahan karena Anda lebih efisien menggunakan penyimpanan dan pencadangan.

Perlu bantuan lainnya?

Kembangkan keterampilan Anda
Jelajahi pelatihan
Dapatkan fitur baru terlebih dahulu
Gabung Microsoft Insider

Apakah informasi ini bermanfaat?

Terima kasih atas umpan balik Anda!

Terima kasih atas umpan balik Anda! Sepertinya menghubungkan Anda ke salah satu agen dukungan Office kami akan sangat membantu.

×