2010-09-13 9 views
5

Tôi có Cơ sở dữ liệu (máy chủ sql nhỏ gọn) trong tệp * .sdf. Tôi đã chuyển đổi một dự án khung nhỏ gọn thành một dự án máy tính thông thường và vì lý do nào đó, với cùng một mã và cùng một tệp * .sdf ngoại lệ sau được ném: "tên tệp không hợp lệ. Hãy kiểm tra tên tệp cho cơ sở dữ liệu "vấn đề chuỗi kết nối sql

điều kỳ lạ là trên PC của tôi - chuỗi con" tệp: \ "đã được thêm vào chuỗi kết nối ban đầu của tôi và đó có thể là lý do ngoại lệ được ném. khi tôi xóa chuỗi con "tệp: \" trong chế độ gỡ lỗi, khi chạy, ngoại lệ không được ném.

tại sao chuỗi con này được thêm vào? nó đến từ đâu? và làm thế nào tôi có thể giải quyết vấn đề này?

gần đây tôi phát hiện ra rằng có thể có một số kết nối nào đó với thực tế là tệp app.config bị thiếu. Điều này vẫn không giải thích cách chuỗi kết nối ban đầu tồn tại, chỉ với chuỗi con được thêm vào.

Vui lòng trợ giúp. cảm ơn trước

+0

Tệp sdf có cục bộ không? Trong thư mục con? Nó đâu rồi? Bạn có thể cho ví dụ về chuỗi kết nối của bạn như thế nào không? – curtisk

+0

Vâng, đó là địa phương. Nó nằm trong "C: \ solutionname \ projectname \ bin \ debug \ sdfname.sdf" chuỗi kết nối: "tệp: \\ C: \\ tên giải pháp \\ tên dự án \\ bin \\ debug \\ sdfname.sdf " – George

Trả lời

0

Vì cửa sổ CE không có "thư mục hiện tại", triển khai thường lấy vị trí của cụm hiện đang chạy làm thư mục để xem. Trên máy tính để bàn, chuỗi trả về Assembly.GetExecutingAssembly().GetName().CodeBase bao gồm tiền tố của lược đồ đó .

+0

Assembly.GetexecutingAssembly(). GetName(). CodeBase là gì? và cách khắc phục sự cố đó? – George

+0

Nếu bạn nhập "sdfname.sdf", thì quá trình mở tệp đó sẽ phải giải quyết nó thành, ví dụ: "c: \ somefolder \ sdfname.sdf". Trên các cửa sổ, các nhà phát triển máy thường cho rằng tệp nằm trong thư mục hiện tại, nhưng khi Windows CE không có "thư mục hiện tại", các nhà phát triển CE thường sử dụng đường dẫn của hội. –

+0

Trên Windows CE, hàm này trả về một đường dẫn bạn có thể sử dụng chưa sửa đổi để mở tệp, trong khi trên khung đầy đủ, tiền tố lược đồ (tệp: \\\) được thêm vào. Tôi không biết chuyển đổi này từ đâu liên quan đến tuyệt đối xảy ra, nếu nó nằm trong thư viện của bên thứ 3, bạn có thể xem liệu họ có phiên bản khung công tác đầy đủ mà bạn có thể sử dụng thay vì phiên bản CF không? –

1

Tôi không thấy lý do bạn cần "tệp: //". Nó sẽ hoạt động mà không có điều đó tốt. Để chắc chắn có vẻ sai, bạn có tệp: \ thay vì tệp: //

+0

có thể tôi không giải thích chính xác .. Tiền tố "tệp: \" đã được tự động thêm vào - tôi chưa thêm nó. Đó là lý do tại sao ngoại lệ được ném (không phải bởi tôi, bởi khuôn khổ). Tôi không biết tại sao điều đó lại xảy ra. Tôi muốn tìm nguồn gốc của tiền tố đó và hiểu tại sao điều đó xảy ra, nhưng ngay bây giờ tôi thậm chí sẽ yên xe để loại bỏ nó trực tiếp trong thời gian chạy trước khi tôi gọi hàm đó ném ngoại lệ. Thật không may là chuỗi kết nối là riêng tư và do đó - tôi không có quyền truy cập vào chuỗi đó. – George

+0

Bạn đã làm cho nó rõ ràng, tôi chỉ không đọc nó đúng cách. Chuỗi kết nối của bạn phải là: "Nguồn dữ liệu = c: \ db.sdf". – Bryan