Chúng tôi có ứng dụng C#/ASP.NET (2.0) chạy trên IIS 6 trên Windows Server 2003 Enterprise Edition. Ứng dụng này đọc các tệp Excel bằng OleDb, nhưng có trường hợp khi chúng tôi nhận được một ngoại lệ "Lỗi không xác định" được ném từ bên trong ứng dụng.C#/ASP.NET Oledb - MS Excel đọc "Lỗi không xác định"
Tệp được lưu trữ trong thư mục tạm thời bằng mã tải lên tệp của chúng tôi trước khi mở. Vì chúng tôi đã vô hiệu hóa quyền truy cập vô danh trong IIS và vì chúng tôi cũng sử dụng mạo danh trong web.config, thư mục C: \ Windows \ Temp \ có quyền thích hợp cho Tài khoản Người dùng Khách Internet (IUSR_ [MachineName]) để có thể tạo, sửa đổi và xóa các tập tin ở đó.
chuỗi kết nối OleDb:
Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: \ Windows \ Temp \ tmp123.tmp.xls;
Thuộc tính mở rộng = "Excel 8.0; HDR = Có; IMEX = 1;"
[Các "Data Source" thuộc tính trên sẽ thay đổi cho mỗi tập tin.]
The stack trace of the exception is: System.Exception: FileParsingFailed ---> System.Data.OleDb.OleDbException: Unspecified error at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open()
Cách giải quyết:
Cho đến nay, thực hiện giải pháp duy nhất chúng ta có thể đưa ra là để làm một iisreset (chúng tôi cũng có ứng dụng tái chế hồ bơi được cấu hình để xảy ra một lần mỗi ngày trong IIS, nhưng nó dường như không giúp đỡ vì vấn đề đôi khi vẫn tồn tại trong vài ngày liên tiếp). Mặc dù đây không phải là điều tốt để làm, điều khiến chúng ta trở nên tồi tệ hơn là chúng ta có các ứng dụng khác trên cùng một trang web sẽ bị ảnh hưởng bất cứ khi nào chúng ta thiết lập lại IIS.
Những câu hỏi:
1. Làm thế nào để chúng ta giải quyết lỗi này vì nó xảy ra thường xuyên và chúng tôi không thấy một mô hình?
2. Có cách nào tốt hơn (và miễn phí) để xử lý các tệp Excel từ C#/ASP.NET ngoài OleDb? (Chúng tôi không muốn cài đặt MS Office trên các máy chủ vì nó không được khuyến khích bởi Microsoft)
hạn chế của chúng tôi:
1. Chúng tôi đang mắc kẹt với các định dạng (.xls) MS Office 2003 và không thể di chuyển đến Định dạng MS Office 2007 (OOXML). 2. Lý do chúng tôi không sử dụng CSV là vì chúng tôi có thể có dấu phẩy trong dữ liệu của chúng tôi (đây là một nỗi đau để giải quyết ngay cả khi chúng tôi sử dụng trích dẫn) và chúng tôi cũng sử dụng nhiều trang tính trong bảng tính của mình CSV).
Cảm ơn! :)
Cập nhật:
Cảm ơn, Keith. Nó có vẻ giống như một vấn đề với động cơ phản lực, nhưng chúng tôi sử dụng nó vì thiếu (miễn phí và dễ sử dụng) lựa chọn thay thế.
Cảm ơn, Joe. Nhưng chúng tôi đang có ngân sách hạn chế - vì vậy, chúng tôi chủ yếu tìm kiếm các công cụ/thư viện miễn phí.