MSSQL Hatası 'Temel sağlayıcı Açıldığında başarısız oldu'


220

Bir kullanıyordum .mdfbir bağlanmak için databaseve entityClient. Şimdi bağlantı dizesini hiçbir .mdfdosya olmayacak şekilde değiştirmek istiyorum .

Aşağıdakiler connectionStringdoğru mu?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />-->
   <add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Çünkü her zaman hatayı alıyorum:

Temel sağlayıcı Open'da başarısız oldu


2
IIS altında çalıştırmayı denediğimde burada da aynı sorun var. VS Server'da çalışırsam hata alıyorum.
Zote

11
Ben aynı sorunu vardı ve Integrated Securityconnectionstring kaldırıldı , bir kullanıcı oluşturdu ve sysadminizinleri olduğundan emin olun ve o kullanıcı linkstring ekledi.
Fulvio

DB'niz nerede bulunur, IIS'de barındırılan bir uygulamadaysa DB'nizi App_Data klasörünüze yerleştirmeli ve orada aramak için Entityframework modeli tarafından oluşturulan bağlantı dizesini düzenlemelisiniz. stackoverflow.com/questions/9809442/…
eran otzap

Bu sorun vardı ve bağlantı dizesine şifre ekleyerek çözüldü.
satyrFrost

IIS altında çalışırken Entegre Güvenliği kaldırmak benim için işe yaradı
Jon

Yanıtlar:


215

Bu hatayı aldım ve birkaç çözüm buldum:

Bağlantı dizenize bakıldığında, geçerli görünüyor. Bu blog gönderisini buldum , burada sorun Entegre Güvenlik kullanıyor olmaları . IIS üzerinde çalışıyorsanız, IIS kullanıcınızın veritabanına erişmesi gerekir.

Entity Framework'ü İşlemlerle birlikte kullanıyorsanız , Entity Framework her veritabanı çağrısıyla otomatik olarak bir bağlantı açar ve kapatır. İşlemleri kullanırken, bir işlemi birden çok bağlantıya yaymaya çalışıyorsunuz. Bu kadar yükseltir MSDTC'yle .

( Daha fazla bilgi için bu referansa bakın. )

Kodumu şu şekilde değiştirmek sorunu çözdü:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

7
Bu tablolara erişmek için Linq kullanırken (EF4 kullanarak) nasıl yapılır?
Brett Rigby

2
@Brett Rigby: stackoverflow.com/questions/794707/… bunu Linq / EF ile nasıl yapacağınızı kapsar.
Scott Stafford

63
EF / DBContext kullanıyorsanız, doğru çağrı context.Database.Connection.Open ();
canlı aşk

2
Keşke ben ilk bulduğumda kod için kayma yerine yazı okumak istiyorum. Benim sorunum (bu cevapta belirtildiği gibi) CRM 2011 Eklentisi bağlamı için AppPool kullanıcısı ayarladığım Veritabanına yazma erişiminin olmamasıydı. Kullanıcıyı SQL'e eklediğimde, Eklenti bir cazibe gibi çalıştı.
Mike_Matthews_II

2
Oluşturduğum bağlamdan sonra benim adlandırılmış bir bağlantı dizesi yoktu ....... Bunu da kontrol edin.
Bill Blankenship

38

context.Connection.Open() DTC yapılandırmasında "Uzak İstemcilere İzin Ver" i etkinleştirmeyi denediğim için sorunumu çözmedim, artık hata yok.

Windows 7'de, dcomcnfg, Bileşen Hizmetleri -> Bilgisayarlar -> Bilgisayarım -> Dağıtılmış İşlem Düzenleyicisi -> Yerel DTC'ye Sağ Tıkla -> Güvenlik komutunu çalıştırarak DTC yapılandırmasını açabilirsiniz.


11
Windows 7'de , dcomcnfg , Bileşen Hizmetleri -> Bilgisayarlar -> Bilgisayarım -> Dağıtılmış İşlem Düzenleyicisi -> Yerel DTC'ye Sağ Tıkla -> Güvenlik komutunu çalıştırarak DTC yapılandırmasını açabilirsiniz .
kerem

7
Aslında Yerel DTC'ye sağ tıklayın -> Özellikler -> Güvenlik
Otto Abnormalverbraucher

27

Hata atmanın iç nedeninin ne olduğunu görmek için innerException öğesini görmelisiniz.

Benim durumumda, orijinal hata:

"D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf" fiziksel dosyası açılamıyor. İşletim sistemi hatası 5: "5 (Erişim reddedildi.)". D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf dosyası için otomatik adlandırılmış bir veritabanı ekleme denemesi başarısız oldu. Aynı ada sahip bir veritabanı var veya belirtilen dosya açılamıyor veya UNC paylaşımında bulunuyor.

bu, mevcut kullanıcılara dosyaların özelliklerini kullanarak ilgili dosyalara mdfve ldfdosyalara erişim için tam izin vererek çözüldü .


24

Ben sorun bu değişkenlerden birinde bağlantı dizesi içinde sunucu yolu vardı bulundu:

SERVER\SQLEXPRESS
SERVER

Gerçekten ne zaman sahip olmalıyım:

.\SQLEXPRESS

Nedense SQL örneğini bulmakta zorluk çektiğimde hatayı aldım.


6
Bunun nedeni, SQL Server için bir bağlantı yöntemi olarak adlandırılmış kanalların etkin olmaması olabilir.
Paul

1
@ Paul, teşekkürler. Muhtemelen adlandırılmış borular devre dışı bırakılan yeni bir SQL yüklemesi olduğu için. Söylediğin için teşekkürler. +1
dooburt

1
Bunun için teşekkürler, adlandırılmış borular devre dışı bırakıldığından bu sorunu yaşadım.
Patrick Allwood

15

Bu sadece yaygın bir konudur. Ben bile bu sorunla karşılaştım. Windows kimlik doğrulaması ile yapılandırılmış geliştirme makinesinde mükemmel bir şekilde çalıştı:

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Aynı yapılandırma ile IIS'de barındırıldıktan sonra bu hatayı aldım:

Temel sağlayıcı Open'da başarısız oldu

connectionStringYapılandırma dosyasında değişiklik çözüldü :

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Diğer yaygın hatalar şunlar olabilir:

  1. Veritabanı hizmeti durdurulabilir
  2. Windows kimlik doğrulamalı yerel bir veritabanına işaret eden ve IIS'de barındırılan Veri Kaynağı öznitelikleri
  3. Kullanıcı adı ve şifre yanlış olabilir.

Benim için sorun, EF veri modelini oluşturduğumda, VS'deki Veri Bağlantılarından giriş verilerini kullanan bir bağlantı dizesi oluşturdu. Bağlantı dizesinde hiçbir kullanıcı veya parola bulunmadığından, bu dağıtım sorununu gidermek için parolayı kaldırın Integrated Security=Trueve değiştirin user id=sa;password=notmyrealpassword.
LostNomad311

10

Bu istisnayı aldığınızda, ayrıntıyı genişlettiğinizden ve iç istisna ayrıntılarına baktığınızdan emin olun, çünkü neden çünkü oturum açma işleminin başarısız . Benim durumumda, bağlantı dizesi veritabanıma erişimi olmayan bir kullanıcı içeriyordu.

Tümleşik Güvenlik (oturum açmış Windows Kullanıcısının bağlamı) veya bağımsız bir SQL hesabı kullanıp kullanmadığınızdan bağımsız olarak, kullanıcının bu sorunu önlemek için erişmeye çalıştığınız veritabanı için 'Güvenlik' altında uygun erişime sahip olduğundan emin olun.


Orijinal gönderiyle aynı sorunu yaşadım, ana bilgisayar adımı doğruladım ve doğru kullanıcı adını kullandığım iç istisnada doğruladım. SSMS kullanıcı güvenliği doğru görünüyor - SQL Server hesabı düzgün bir şekilde ayarlandı ve veritabanına genel erişimi var. Ancak, giriş başarısız oldu.
Çekiçli Kodlar

Ne yok inner exceptiondevlet konudur? Buradaki cevabım, gerçek altta yatan sorunu anlamak için gereken gizli ek ayrıntıyı sağlayacağıydı. inner exceptionDoğru oturum açma sahip olduğunu doğrulamak olmayacak - bu bir istisna değil bir açıklama bu.
Şubat'ta atconway

Login failed for user 'user'.
Çekiçli Kodlar

Ayrıca NT AUTHORITY\NETWORK SERVICESQL Server kullanıcı listesine eklemeyi denedim . Hala aynı reddedilmiş giriş hatası aldım.
Hammer ile kodlar

ÇÖZÜLDÜ. Ben değiştirmek için gereken data sourceetmek hostname\SQLEXPRESS. Ben denemiş hostnameve .\SQLEXPRESSdaha önce. Sonra entegre güvenlik ile bağlantı kurabildim. Merakla, bu dooburt'un cevabının tam tersi . Merakla, SQL Server kullanıcı adı asla Visual Studio'dan bağlanamadı.
Hammer ile kodlar


4

SQL Server Express hizmeti otomatik olarak başlatılacak şekilde ayarlanmamış.

1) Kontrol paneline gidin 2) Yönetimsel Araçlar 3) Hizmet 4) SQL Server express'i üzerine tıklayarak otomatik olarak başlayacak şekilde ayarlayın 5) Sağ tıklayın ve hizmeti başlatın

Umarım bu yardımcı olur.


3

Bu, bir veritabanını geri yüklerseniz ve kullanıcı zaten farklı şemalarla mevcutsa, doğru izinleri atayamayacağınız durumlarda da olabilir.

Bu çalıştırmayı düzeltmek için:

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO

Kesinlikle sorun buydu. Sadece bir yedeklemeden geri yükledim. Ayrıntılı analiz için bir göz atın .
nesimtunc


2

Sağlanan bağlantı dizesindeki her bir öğe değerinin doğru olduğundan emin olun. Benim durumumda, bağlantı dizesinde belirtilen katalog (veritabanı adı) adı yanlış olduğundan aynı hatayı alıyordum.


1

Bağlantı durumu nedeniyle istisnalar ile benzer bir sorun vardı, sonra etki alanı hizmet sınıfı değişken statik (yanlışlıkla) olarak işaretlenmiş olduğunu fark ettim.

Benim tahminim hizmet kitaplığı belleğe yüklendiğinde, her yeni çağrı aynı statik değişken değerini (etki alanı hizmeti örneği) kullanarak sona erer ve bağlantı durumu üzerinden çakışmalara neden olur.

Ben de her istemci çağrısı yeni bir iş parçacığı ile sonuçlanan, bu nedenle aynı etki alanı hizmeti örneğine erişen birden çok iş parçacığı bir tren enkazına eşit olduğunu düşünüyorum.


Bunu benim için de yaptı. Statik olarak işaretlerseniz, sadece çalışmaya çalıştığı örnekle her türlü soruna neden olur.
Michael

1

Aynı sorunu vardı ama benim için ne çalıştı bağlantı dize kaldırma oldu:

persist security info=True


1

İç istisna ile benzer bir hata yaşadım:

işlem, işlemin durumu için geçerli değil

DTC güvenlik ayarlarını etkinleştirerek çözebilirim.

DTC Özelliklerine Git, Güvenlik Sekmesi altında aşağıdakileri kontrol edin

  • Ağ DTC Erişimi
  • RemoteClients'a izin ver
  • İşlem Yöneticisi İletişimi
  • Gelenlere İzin Ver
  • Giden'e İzin Ver

1

Bir ASP.NET web uygulamasında bu hatayı alırsanız, bahsedilen diğer şeylere ek olarak aşağıdakileri kontrol edin:

  1. Veritabanı Kullanıcı Güvenliği İzinleri (kullanıcıların veritabanınıza erişmesine izin verilir.
  2. IIS'deki uygulama havuzunuzu kontrol edin ve veritabanınıza erişmesine izin verilen alanın doğru olduğundan emin olun.


1

Sunucu makinesinde SQL Server (ve bağlantı noktası 1433 için) için yeni bir Windows Güvenlik Duvarı kuralı tanımlamak bu hatayı çözer (eğer sunucu adınız, kullanıcı oturum açma adınız veya parolanız bağlantı dizenizde yanlış değilse ...).


0

Ben bir kez pc diğerine uygulama hareket ediyordu ve yukarıdaki hiçbiri çalıştı çünkü yaygın bir hata ben hem App.Config hem de Web.Config bağlantı dizesini kopyalamak unuttum oldu!


0

Benzer bir sorunum vardı: Test senaryolarımda her zaman bu hatayı aldım. "Dağıtılmış İşlem Hizmeti" nin başlatılmadığını öğrendim (run: services.msc -> "Dağıtılmış İşlem Hizmeti" ni başlat (otomatik başlatmak üzere ayarlamak için en iyisi)). Bunu yaptıktan sonra bir cazibe gibi çalıştı ...


0

Bu özel durumdan kurtulmak için veritabanı dosyalarını (.mdf / .ldf) App_Data klasörüne kopyaladım.


0

Ben de aynı sorunla karşı karşıyaydım. Şimdi bağlantı dizesinden kullanıcı adı ve parolayı kaldırarak yaptım.


0

Benim için sadece basit bir hataydı:

Ben kullanılan Amazon EC2 ve ben bağlantı dizesinde benim elastik IP adresini kullanılır, ama IP adresleri değişti zaman benim bağlantı dizesi güncellemek için unuttum.


0

Bu hatayı aniden sitelerimizden birinde maviden aldım. Benim durumumda, SQL kullanıcı şifresinin süresinin dolduğu ortaya çıktı! SQL Server Management Studio'da parola son kullanma kutusunu açmak işe yaradı !



0

In IIS set Uygulama Havuzu Kimlik o DataBase değişikliği yapmak için yeterli izne sahip olarak hizmet hesabı kullanıcı veya yönetici Hesabı veya karınca hesabı.


0

Benim durumumda, web.config dosyasındaki bağlamın yapıcısına kaydettiğim bağlantı dizesi adı arasında bir uyumsuzluk vardı. Kopyalama ve yapıştırma işlemlerinden kaynaklanan basit hata: D

    public DataContext()
        : base(nameOrConnectionString: "ConnStringName")
    {
        Database.SetInitializer<DataContext>(null);
    }


0

yeni bir veri kaynağına bağlandığımda thats bulduğum aynı hata var Yeni veri kaynağı için kullanıcı adı ve passowrd değiştirmeyi unutuyorum


0

Ayrıca, SQL Server Örnek adı belirtilmezse ve SQL ana bilgisayarında birden çok SQL örneği yüklüyse bu hatayla karşılaştım. Aşağıda açıklığa kavuşacak birkaç örnek verilmiştir:

Aşağıdaki bağlantı dizesi, .NET WebForms uygulamasında iç istisna olmadan "Temel sağlayıcı Açıldığında başarısız oldu" özel durumu ile sonuçlanır:

 connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"

Aşağıdaki bağlantı dizesi, SQL ortamının birden çok örneğinin bulunduğu bir .net WebForms uygulamasında beklendiği gibi yürütülür. Nadir biliyorum, ancak farklı projeleri barındırmak için geliştirici kutumda birkaç farklı SQL örneği var:

 connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost\SQLSERVER2014;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"

0

benim durumumda sunucu adresi sunucu yöneticisi tarafından değiştirildi, bu yüzden bağlantı dizesini yeni sunucu adresine değiştirmek zorunda kaldım


0

Bu uygulama altında çalıştığı Uygulama Havuzu giriş değişti çünkü bu sorunu vardı.

IIS'de:

  • Sitenizi tıklayıp Temel Ayarlar'a giderek Uygulama havuzunu bulun.

  • Uygulama Havuzları'na gidin.

  • Sitenizin uygulama havuzunu tıklayın.

  • Gelişmiş Ayarlar'ı tıklayın.

  • Kimlik alanına hesap giriş bilgilerini ve şifresini girin.

  • Sitenizi yeniden başlatın ve tekrar deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.