2013-03-20 31 views
7

Tôi đang sử dụng OleDbConnection, OldDbCommand và OleDbReader đối với cơ sở dữ liệu Access.Điều gì gây ra OLEDbException của tôi, IErrorInfo.GetDescription không thành công với E_FAIL (0x80004005)

Tôi có một truy vấn được đặt tên trong cơ sở dữ liệu mà tôi đang gọi từ mã.

Truy vấn hoạt động chính xác khi nó được truy cập từ quyền truy cập.

Một số tài nguyên cho biết lỗi có thể xảy ra do sử dụng các từ dành riêng trong truy vấn và bọc chúng bằng dấu ngoặc vuông. Tôi không sử dụng bất kỳ từ dành riêng và đã bao bọc tất cả các tên cột trong ngoặc đơn để loại trừ nó ra.

Đang cố gắng để xác định nơi mà vấn đề là, tôi đã đơn giản hóa các truy vấn để đơn giản

SELECT id FROM table1 WHERE id = 5 

mà kết nối Ole không ném một ngoại lệ.

Khi tôi giới thiệu phần tiếp theo của truy vấn:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 

sau đó tôi nhận được ngoại lệ.

chi tiết Trường hợp ngoại lệ như sau:

  • Message: IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
  • ErrorCode: -2147467259
  • NativeError: -533136361
  • SQLState: 3000

Trả lời

9

tôi dường như đã nhầm lẫn khi tôi nói câu truy vấn không chứa bất kỳ từ reserved.

Truy vấn tôi đang sử dụng đang chọn từ truy vấn khác trong Cơ sở dữ liệu Access. Truy vấn khác đó có một từ khóa dành riêng đã gây ra sự cố.

BTW:

The Access database engine runs in different modes, depending on whether it is called from Access, data access objects, the Microsoft OLE Provider for the Access database engine, or the Microsoft Access ODBC driver. It can be run in either ANSI mode or non-ANSI (traditional) mode.

Because using these two modes results in two slightly different sets of reserved words, a query that uses a reserved word might work in one mode and fail in another mode

Access 2007 reserved words and symbols

Keith

+0

Out tò mò, từ khóa dành riêng trong truy vấn thất bại là gì? – DaveInCaz

+1

Quá nhiều năm trước để ghi nhớ .. Phần quan trọng đối với tôi là tìm ra rằng có những từ dự trữ khác nhau tùy thuộc vào cách bạn đang gọi các truy vấn được lưu trữ –

2

Một nguyên nhân có thể xảy ra ngoại lệ này là nếu File của bạn cố gắng để tải/đọc không tồn tại.

Tôi thấy hữu ích khi thực hiện "File.Exists" trước khi cố gắng mở tệp chỉ để đảm bảo mã của tôi phát hiện nguyên nhân cụ thể này của ngoại lệ "IErrorInfo.GetDescription không thành công với E_FAIL".

4

..and have wrapped all column names in brackets anyway to rule it out.

Không chỉ tên cột cần được bao quanh bởi dấu ngoặc vuông tên Bảng nên cũng Ví dụ, thay thế dòng dưới đây

SELECT id FROM table1 WHERE id = 5 

Với dòng dưới đây

SELECT [id] FROM [table1] WHERE [id] = 5 
Các vấn đề liên quan