2010-05-16 32 views
16

Khi tôi cố gắng chèn bản ghi, tôi gặp phải lỗi này: Nhà cung cấp cơ bản không thành công khi mở. Lỗi này chỉ xảy ra với IIS và không phải với máy chủ web của VWD 2008. Trong EventViewer tôi nhận được lỗi ứng dụng này: Không thể tạo một cá thể người dùng của SQL Server do sự thất bại trong việc bắt đầu quá trình cho cá thể người dùng. Kết nối sẽ được đóng lại. [KHÁCH HÀNG:]Khuôn khổ thực thể: "Nhà cung cấp cơ bản không thành công khi mở"

<add name="ASPNETDBEntities" 
    connectionString=" 
     metadata=res://*/Models.FriendList.csdl|res://*/Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
     provider=System.Data.SqlClient; 
     provider connection string=&quot; 
     Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
     Integrated Security=True; 
     Connect Timeout=30; 
     User Instance=True; 
     MultipleActiveResultSets=True&quot;" 
    providerName="System.Data.EntityClient" /> 

Tôi đang sử dụng tập tin ASPNETDB.MDF, và không phải bất kỳ cơ sở dữ liệu bên ngoài. Tôi đã tìm kiếm đủ cho điều này, nhưng không sử dụng.

Tất cả mọi thứ hoạt động tốt với VWD webserver

Trả lời

9

Bạn nên tạo một tài khoản sql cho máy chủ web của bạn để truy cập vào cơ sở dữ liệu aspnetdb. Nó hiện đang sử dụng xác thực tích hợp (cố gắng đăng nhập với danh tính máy chủ web đang sử dụng để chạy ứng dụng).

Ví dụ dưới đây sử dụng auth tích hợp. Tôi sẽ sử dụng SQL auth mặc dù.

http://msdn.microsoft.com/en-us/library/ff649314.aspx

+0

Cách tạo tài khoản sql? Tôi chưa cài đặt Sqlserver 2008. Tôi đang sử dụng phiên bản Express Sqlserver 2008 được cài đặt với VWD 2008. Vì vậy, không có phân tích truy vấn hoặc người quản lý doanh nghiệp. – pokrate

+0

Cài đặt Microsoft SQL Server Management Studio Express http://www.microsoft.com/downloads/details.aspx?familyid=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B&displaylang=vi –

0

Thêm thuộc tính dưới đây trong chuỗi kết nối mà bạn đã đưa ra.

<add 
    name="ASPNETDBEntities" 
    connectionString="metadata=res://*/Models.FriendList.csdl| 
         res://*Models.FriendList.ssdl|res://*/Models.FriendList.msl; 
         provider=System.Data.SqlClient;provider connection string=&quot; 
         Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
         Integrated Security=True;Connect Timeout=30; 
         User Instance=True; 
         MultipleActiveResultSets=True&quot;" 
    ProviderName="System.Data.EntityClient" 
    User Instance="False"/> 
+0

Giả sử tham chiếu rất mơ hồ của bạn về "thuộc tính bên dưới" (mà bạn đang đề cập đến chính xác?) là 'MultipleActiveResultSets = True', nó không làm việc cho tôi – Ortund

0

Có thể đã quá muộn để trả lời nhưng tôi có cùng sự cố.

Tôi đã thêm khoảng thời gian chờ phạm vi (5 phút). Tôi cho một ví dụ.

Dim varIntervalo As New TimeSpan(0, 5, 0) 
Using varTransaccion As New TransactionScope(TransactionScopeOption.Required, varIntervalo) 
    For vari As Integer = 2 To varMatrizDatos.GetUpperBound(0) 
     Dim varWhateverAs New TABLE 
     varWhatever.ID_TABLE = something 
     varWhatever.DESC_TABLE = something else 
     varWhatever.DATE_TABLE = CDate(Now.Date) 

     varEntidades.AddToTABLESet(varWhatever) 
     varEntidades.SaveChanges() 
    Next 
    varTransaccion.Complete() 
End Using 

Có thể mã này có thể được cải thiện.

3

Tôi đã nhận được cùng một vấn đề và sau khi thực hiện gỡ lỗi tôi thấy rằng tôi đang tạo phiên bản mới của thực thể DB trên mọi hành động và tạo phiên bản mới của thực thể Db nghĩa là mở kết nối mới với db.

Dưới đây là các mã:

Private tmpConnection As New DbModel.DbEntities 

nên bằng cách gọi biến một lần nữa và một lần nữa tạo ra nó thể hiện mới của DbEntites và mở kết nối mới để db.

vì vậy tôi viết một chức năng nhỏ cho vấn đề này và giải quyết được vấn đề của tôi. Bây giờ không còn lỗi nữa.

Private tmpConnection As DbModel.DbEntities 

Public Function dbCon() As DbModel.DbEntities 

    If tmpConnection IsNot Nothing Then 

     If tmpConnection.Connection.State = ConnectionState.Closed Then 

      Try 
       tmpConnection.Connection.Open() 
       Return tmpConnection 
      Catch ex As Exception 
       My.Response.Redirect("dberror.aspx") 
      End Try 

     Else 

      Return tmpConnection 

     End If 

    Else 

     tmpConnection = New DbModel.DbEntities 

     Try 
      tmpConnection.Connection.Open() 
      Return tmpConnection 
     Catch ex As Exception 
      My.Response.Redirect("dberror.aspx") 
     End Try 

    End If 

    Return Nothing 
End Function 

và điều cuối cùng trong chuỗi kết nối của bạn, vui lòng thêm "Kết nối Timeout = 30;"

thats làm việc quá hoàn hảo đối với tôi

2

Sử dụng ví dụ mới của DB Entity trên tất cả các hành động không nên thể chất tạo kết nối đến máy chủ SQL của bạn. Entity Framework sẽ sử dụng pool kết nối được tạo cho (quy trình, miền ứng dụng, chuỗi kết nối) như được định cấu hình trong chuỗi kết nối của bạn để tránh tạo kết nối mới.

Vấn đề này là rất môi trường và tinh chỉnh các thông số (trong chuỗi conn của bạn) như dưới đây sẽ giải quyết vấn đề-

Min Pool Size = 1;

Kích thước hồ bơi tối đa = 100; // mặc định

Thời gian chờ kết nối = 15; // tính bằng giây

Pooling = true;

+0

Câu trả lời này đã làm cho tôi. Tôi đã tăng gấp đôi các giá trị tham số 'Max Pool Size' và' Connection Timeout' mặc định. Thông tin đầy đủ ở đây: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring(v=vs.110).aspx Trước đó, mặc dù tôi đã thay đổi thành ** SQL Server * * từ ** Windows ** xác thực và đảm bảo 'DTC' đã được thiết lập và chạy và cho phép các máy khách từ xa không khắc phục được sự cố của tôi nhưng tôi nghĩ chúng cũng cần thiết. –

0

Bên cạnh đó, ngoại lệ này được ném khi bảng bạn sẽ thao tác này sẽ bị xóa hoặc không tồn tại

0

ngoại lệ này dường như được ném khi có bất cứ điều gì mà có thể gây ra chuỗi kết nối của bạn không hợp lệ. Thông tin đăng nhập không hợp lệ là nguyên nhân của tôi.

1

Trong trường hợp của tôi, tôi đã sử dụng Sql CE, và chuỗi kết nối của tôi đã được thiết lập với một đường dẫn tuyệt đối thay vì inf | DataDirectory | biến. Thay đổi điều này và nó bắt đầu làm việc trên máy chủ.

Rõ ràng, nó hoạt động tốt trên máy phát triển.

0

Tôi đã gặp sự cố tương tự và tôi cũng đang sử dụng IIS. Tôi đã mở một cửa sổ lệnh và nhập vào iisreset. Đã giải quyết được sự cố.

0

Sự cố này xảy ra khi Cơ sở dữ liệu được thêm vào trong ServerExplorer dưới dạng xác thực Windows. Khi bạn sử dụng xác thực sql tại thời điểm cơ sở dữ liệu được thêm vào trong ServerExplorer, sự cố sẽ giải quyết. Nếu vẫn sử dụng xác thực Windows và tránh ngoại lệ này, hãy cung cấp id người dùng và mật khẩu của cơ sở dữ liệu trong chuỗi kết nối trong tệp webconfig.

Sự cố này chỉ phát sinh khi chúng tôi lưu trữ dịch vụ trong IIS

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