Em đang làm một form có khả năng sẽ save 300 dòng dữ liệu hoặc hơn nữa. Em dùng Asp.net mvc. Em cho file 300 dòng rồi nhấp save cái là nó chuyển sang undefined luôn…! T_T Các thánh xin cho một con đường để thực hiện được ạ?
Có cách nào để Save 300 dòng dữ liệu vào database từ asp.net mvc
đọc từng dòng rồi insert vào thôi, còn có lỗi gì thì post tử tế lên
Ý bạn là thế nào mình vẫn không hiểu rõ? Có phải là database của bạn có một trường XXX nào đó mà bạn dùng để chứa nội dung của file kia? Nếu bạn dùng SQL Server thì nên chọn kiểu dữ liệu NTEXT.
Và chạy lệnh này bằng C#:
UPDATE <Tên bảng>
SET <Tên cột> =
(SELECT BulkColumn FROM OPENROWSET(BULK N'<Đường dẫn file>', SINGLE_BLOB) AS x)
WHERE <ID = 2 chẳng hạn>
Ý tưởng của mình là từ việc thêm ảnh vào SQL Server, bạn có thể đọc tại đây: http://www.sqlhub.com/2009/08/insert-and-update-image-field-in-sql.html
hàm save của mình làm như sau:
Đầu tiên mình, lấy toàn bộ dữ liệu từ grid trên partialview chuyển sang thành file json rồi trả về controller qua phương thức Post. Trong controller, mình chuyển dữ liệu kiểu json đó thành list rồi lấy dữ liệu từng dòng để save vào database… Mình chục dòng thì được mà 300 dòng thì bị out luôn… Nó báo lỗi HTTP 404 : không tìm thấy trang đó. Bạn hiểu ý của mình không?
Không phải mình file của mình là file dữ liệu chữ số thôi, chứ không phải hình…! hihi
thế thì phải xem lại kích thước của gói dữ liệu gửi lên, nên để server side xử lí dữ liệu luôn, tức là cho up nguyên file đó lên rồi server tự phân tích. Lỡ ng dùng cần save 3000 dòng hày 3 triệu dòng thì làm sao.
Server đọc file mà save. Mình nghĩ đến cách đó. Nhưng người dùng họ up lên thấy ko vừa ý, họ sửa lại 1 trong 300, hay 3000 dòng thì khi save sẽ sai ngay.
thế cụ thể implement của bạn giờ đang là như thế nào
Hiện giờ, mình build được 1 trang để nhập dữ liệu,import file, show dữ liệu => chỉnh sửa gì đó rồi save dữ liệu.Nó okie khi dữ liệu vài ba , chục dòng, còn dữ liệu lớn như 300, 3000 dòng thì nó thông báo http 404. Vậy mình đang làm được tới đó. Cách làm save bằng cách đọc từng dòng từ file import mình nghĩ tới rồi, nhưng mà nó sẽ gặp trường hợp, họ muốn sửa lại dòng dữ liệu nào đó trong file 300,3000 dòng thì mình chưa kiếm được cách.
nghĩa là bạn show 1 web interface cho người dùng thao tác với dữ liệu từ đâu đó, sau đó up lên web cho bạn thôi chứ gì,
- Bạn có thể lưu tạm dữ liệu vào 1 temp file trước khi up lên mà, sau đó up file đó lên, up xong thì xóa temp file đi (nếu thích). Vừa đảm bảo user k thao tác trực tiếp với data, hay cấu trúc data, vừa đảm bảo k dính limit của 1 POST request thông thường.
- Tương tự cách 1, nhưng send raw binary data thay vì send file bằng POST multi part.
Ý bạn là lấy dữ liệu trên web cho vào file tạm nào đó, rồi send nó từ view qua controller rồi controller đọc file đó rồi save vô đúng ko?
uh, thử xem, hơi rắc rối so với bình thường
Bạn thấy cái cách mình chỉ bạn up hình không? Thực chất nó không phải là up hình, mà là up file, rồi CSDL sẽ lưu trữ file đó dưới dạng binary data.
Giả sử bạn up hình thì CSDL chứa binary data của file chứa hình đó, và khi người dùng tải file đó về thì cũng phải convert sang bitmap hoặc mở file đó bằng phần mềm xem ảnh thì mới hiển thị hình được. Cách mình chỉ cho bạn là nó sẽ upload toàn bộ binary data của file 300 dòng đó vào CSDL, khi bạn tải về thì phải convert sang text, hoặc mở file đó lên bằng notepad