2012-06-19 32 views
5

Tôi đang cố gắng làm điều gì đó mà tôi tin là rất đơn giản. Tôi có một chuỗi kết nối mà tôi đang lấy từ một cơ sở dữ liệu. Khi tôi tạo một thể hiện mới của kết nối SQL có vẻ như (khi tôi gỡ lỗi và nhìn vào đối tượng) giống như nó đang tạo chuỗi kết nối db đúng cách. Tuy nhiên, messasge lỗi tôi nhận được làm cho tôi nghĩ rằng tất cả các thông tin sau khi gạch dưới trong tên cơ sở dữ liệu đang được loại bỏ.Tên cơ sở dữ liệu sau gạch dưới trong chuỗi kết nối đang bị bỏ qua

Mã Ex:

Database db = new SqlDatabase(ConnectionString); // Connection string appears correct 
DbCommand dbCommand = db.GetStoredProcCommand("StoredProcName"); 
DataSet approverDataset = db.ExecuteDataSet(dbCommand); // when this executes, exception is generated 

Khi tôi chạy mã này tôi chào đón với thông điệp ngoại lệ sau đây: Máy chủ chính "testdb_psidentity" không có khả năng truy cập vào cơ sở dữ liệu "TestDB" dưới sự an toàn hiện nay bối cảnh

Dưới đây là chuỗi kết nối của tôi:

DataSource=testserver.com;Database=testdb_ps;Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

tôi đã cố gắng thay đổi này để:

DataSource=testserver.com;Database=[testdb_ps];Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

Và trong khi dường như có được tên đầy đủ của cơ sở dữ liệu, nó cũng dường như đang tìm kiếm cơ sở dữ liệu với các dấu ngoặc đó trong tên. Khi tôi nhận được lỗi này: Không thể mở cơ sở dữ liệu "[testdb_ps]" do thông tin đăng nhập yêu cầu. Đăng nhập thất bại. Đăng nhập không thành công cho 'testdb_psidentity' của người dùng.

Tuy nhiên, tôi có thể đăng nhập kết nối với cơ sở dữ liệu bằng cách sử dụng thông tin đăng nhập/mật khẩu đó trong studio quản lý máy chủ SQL.

Bất kỳ cách nào tôi có thể làm cho nó chấp nhận tên cơ sở dữ liệu tên cơ sở dữ liệu testdb_ps? Tôi không thể đơn giản thay đổi tên cơ sở dữ liệu vì tôi không có quyền truy cập vào điều này và tôi đã được thông báo rằng việc thay đổi tên cơ sở dữ liệu đơn giản sẽ không xảy ra.

+0

người dùng của bạn "testdb_psidentity" có kết nối/thực thi quyền trên cơ sở dữ liệu không? nếu bạn không chắc chắn về nó, bạn có thể kiểm tra nó bằng cách vào -> nhấp chuột phải vào cơ sở dữ liệu -> thuộc tính -> quyền -> chọn người dùng và kiểm tra theo tab rõ ràng ... – NiK

+0

Đáng buồn thay, khi tôi nhấp chuột phải vào DB, tôi không có quyền truy cập để xem điều này. –

+0

Phạm vi tiếp cận nhưng hãy thử đặt nguồn dữ liệu trong cú pháp [testserver.com] hoặc [testserver]. [Com]. Và bạn chắc chắn tên của nguồn là testserver.com (không phải máy chủ kiểm tra). Xem tên trong SMSS – Paparazzi

Trả lời

1

Bạn có thể thử đặt dấu ngoặc kép quanh chuỗi kết nối, tôi nghĩ rằng đó là giải thích dấu gạch dưới dưới dạng dấu phân tách.

Tùy thuộc vào cách bạn sử dụng nó sử dụng dấu ngoặc kép hoặc

" 
+0

Báo giá của bạn có bị hỏng không? Ý bạn là sao? Tôi đã thử sử dụng nó như một biến chuỗi. Tôi đã không cố gắng cứng mã hóa nó, nhưng đó là nói chung cau mày khi trong tiêu chuẩn mã hóa của chúng tôi. –

+0

Thông thường chúng ta đặt các chuỗi kết nối của chúng ta trong tệp web.config hoặc app.config. Đây là lý do tại sao chúng tôi không thực sự có vấn đề với ký tự '_'. Tuy nhiên, nếu bạn phải lấy chuỗi kết nối từ cơ sở dữ liệu, có thể thử viết nó ra trước chuỗi và gửi chuỗi đó vào. '"' được sử dụng trong một số trường hợp khi bạn không thể chỉ nhập ký tự, nhưng nếu bạn làm một chuỗi chữ trong C# bạn không nên cần nó –

+0

Chỉ là một gợi ý, nhưng nếu cơ sở dữ liệu này đã được khoảng một lúc sau đó tôi sẽ giả sử các ứng dụng khác sử dụng nó? Nếu vậy, bạn có thể xem và xem chúng sẽ như thế nào. –

0

Are u có khả năng kết nối với cơ sở dữ liệu thông qua studio quản lý máy chủ SQL?

Hãy thử

  1. Vô hiệu hóa tường lửa
  2. Sử dụng địa chỉ IP
  3. Sử dụng sql tên ví dụ máy chủ một cách rõ ràng.
0

Tạo các lớp thực thể bằng trình hướng dẫn. Bằng cách này, bạn sẽ nhận được chuỗi kết nối được mã hóa trong app.config

Các vấn đề liên quan