Tedious: Kesalahan pemuatan massal: Saat membaca baris saat ini dari host, pesan berakhir prematur ditemukan.

Dibuat pada 27 Okt 2014  ·  6Komentar  ·  Sumber: tediousjs/tedious

Saat melakukan apa yang seharusnya menjadi beban massal sederhana dari beberapa gambar 32kb (hanya satu gambar seperti itu selama pengujian), saya mendapatkan pesan kesalahan berikut:

RequestError: While reading current row from host, a premature end-of-message was
encountered--an incoming data stream was interrupted when the server expected to see
more data. The host program may have terminated. Ensure that you are using a supported
client application programming interface (API).

    at Connection.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\lib\tedious.js:478:17)
    at Connection.emit (events.js:95:17)
    at Parser.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:434:15
)
    at Parser.emit (events.js:95:17)
    at Parser.nextToken (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\token\token-stream-par
ser.js:91:18)
    at Parser.addBuffer (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\token\token-stream-parser.js:68:17)
    at Connection.sendDataToTokenStreamParser (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\
connection.js:869:35)
    at Connection.STATE.SENT_CLIENT_REQUEST.events.data (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:273:23)
    at Connection.dispatchEvent (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:732:59)
    at MessageIO.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:660:22)

Ini kode saya:

            var req = new sql.Request(conn);
            var table = new sql.Table('#mempictures');
            table.create = true;
            table.temporary = true;
            table.columns.add('uid', sql.VarChar(50), {nullable:false});
            table.columns.add('mempicture', sql.Image, {nullable:false});
            //... then in a loop
                    table.rows.add(keys[i], memberPhotos[keys[i]].BinaryPhotoBuffer); //, memberPhotos[keys[i]].BinaryImage);   

            //... completed with
            var deferred = new q.defer();
            req.bulk(table, function(err, rowct) {
                if (err)
                    deferred.reject(err);

                deferred.resolve(statuses);
            });
            return deferred.promise;

Apakah saya melewatkan sesuatu? Saya merasa ini mungkin terkait dengan #197.

Komentar yang paling membantu

Saya mendapat beberapa kesalahan ini sebelumnya. Itu terjadi juga ketika Anda tidak memiliki baris yang dimasukkan ke dalam loop. Kasus tipikal adalah Anda memiliki kolom yang ditambahkan, dan kemudian Anda mengambil beberapa larik dari tempat lain, dan mengulangi larik itu untuk menyisipkan baris. Terkadang, ketika array kosong, tidak ada baris yang dimasukkan, dan saya akan mendapatkan kesalahan ini. Jadi, lebih baik untuk memeriksa apakah array kosong sebelum menjalankan bulkload.

Semua 6 komentar

Saya memecahkan #197 dengan membandingkan bagaimana utilitas bcp mengkodekan nvarchar(max) (melalui WireShark) dengan cara Tedious melakukannya. Itu mungkin cara termudah untuk menganalisis masalah ini juga.

Jika Anda melihat-lihat spesifikasi TDS, ada banyak catatan satu kali yang mengatakan bagaimana gambar, teks, dan ntext bertindak berbeda atau menyebabkan token yang berbeda dimasukkan dalam header. Sama sekali tidak mengejutkan saya bahwa ada kasus tepi yang tidak ditangani oleh Tedious. Mudah-mudahan Anda sudah menyadari bahwa jenis gambar telah ditinggalkan selama lebih dari enam tahun, dan kemungkinan akan dihapus dari SQL Server dalam waktu dekat (Anda harus menggunakan varbinary sebagai gantinya).

Sejujurnya, semua orang di sini bekerja di perpustakaan ini di waktu luang kami, dan melacak masalah dalam jenis yang tidak digunakan lagi sepertinya bukan penggunaan waktu luang saya yang terbatas. Mungkin @patriksimek akan tertarik. Jika ada masalah dengan tipe yang tidak digunakan lagi (seperti yang terjadi dengan nvarchar(max) ), maka itu cerita yang berbeda. Selain itu, jika Anda melakukan upaya awal untuk mencari tahu apa yang bcp dan Tedious lakukan secara berbeda, kami mungkin juga dapat memberikan lebih banyak bantuan.

Hmm. Saya tidak mengetahui bahwa jenis Gambar telah ditinggalkan, tetapi saya tidak terkejut. Grup saya baru saja mewarisi DB pihak ke-3 dari tempat lain di kampus yang menggunakannya.

Bagaimanapun, karena saya memuat massal ke tabel sementara, kemudian melakukan penggabungan/pembaruan dari sana, saya pikir saya bisa lolos dengan VarBinary di tabel sementara diikuti dengan konversi sebagai solusi.

Terima kasih atas semua kerja keras Anda dalam proyek ini!

Oke bagus. Jika Anda memiliki masalah dengan varbinary, maka pasti mempostingnya dan kami akan memeriksanya.

Saya tidak berpikir itu layak untuk digali. Saya dapat mereproduksi masalah tetapi tidak tahu mengapa ini terjadi. Ada catatan di dokumen:

XMLTYPE hanya LONGLEN_TYPE yang valid untuk BulkLoadBCP.

Gambar juga LONGLEN_TYPE, jadi bagi saya ini terdengar seperti tidak ada dukungan untuk IMAGE dalam penyisipan massal. Yang lebih aneh adalah catatan lain di dokumen:

Perhatikan bahwa untuk operasi INSERT BULK, XMLTYPE dikirim sebagai tipe data NVARCHAR(N) atau NVARCHAR(MAX). Kesalahan dihasilkan jika XMLTYPE ditentukan.

Jadi, apakah XMLTYPE valid dalam penyisipan massal atau tidak? Tidak jelas bagi saya ...

Contoh lain betapa buruknya dokumen TDS. Pikiran pertama saya adalah memeriksa hal yang sama yang Anda lakukan dan melihat apakah ada catatan yang mengatakan apakah gambar adalah jenis penyisipan massal yang valid atau tidak, dan apakah itu harus dikodekan secara berbeda dari biasanya, tetapi saya pergi tanpa kesimpulan. Saya setuju itu tidak layak untuk digali.

Saya mendapat beberapa kesalahan ini sebelumnya. Itu terjadi juga ketika Anda tidak memiliki baris yang dimasukkan ke dalam loop. Kasus tipikal adalah Anda memiliki kolom yang ditambahkan, dan kemudian Anda mengambil beberapa larik dari tempat lain, dan mengulangi larik itu untuk menyisipkan baris. Terkadang, ketika array kosong, tidak ada baris yang dimasukkan, dan saya akan mendapatkan kesalahan ini. Jadi, lebih baik untuk memeriksa apakah array kosong sebelum menjalankan bulkload.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat