2010-10-01 18 views
6

Sadece bir veritabanı sorgular basit bir C# konsol uygulaması yapmaya çalışıyorum - başka bir şey.Hata nasıl adlandırılır "Adlandırılmış Boru Sağlayıcısı, hata: 40 - SQL Server bağlantısı açılamadı"

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll

Additional information: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Şimdi, ben denedim HER:

Ancak, bu hatayı almaya devam! Tüm ayarlarımı düzenledim (güvenlik duvarı istisnası, etkinleştirilmiş TCP/IP, google arama ile bulabileceğiniz herhangi bir çözüm hakkında ekledim). Bağlantı dizimde bulunan aynı kimlik bilgilerini kullanarak SQL Management Studio'yu kullanarak bağlantı kurmaya çalıştığımda, her şey MÜKEMMEL çalışır. Nedense, Visual Studio'dan hiçbir şey çalışmıyor.

at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.SqlClient.SqlConnection.Open() 
    at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) 
    at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() 
    at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() 
    at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.GetQueryText(Expression query) 
    at System.Data.Linq.DataQuery`1.ToString() 

Bunu eğer SqlMetal kullanarak DataContext'i oluşturuldu: Burada
class Program 
{ 
    public static void Main(string[] args) { 

     Invoicing db = new Invoicing("Invoicing"); 

     var q = from sin Invoice 
       where s.Date == 201007 
       select s; 

     foreach(var sin q) 
      Console.WriteLine("{0}, {1}", s.CreateDate, 
           s.EndDate); 


     } 
    } 

benim Yığın izleme:

İşte
<add name="Invoicing" 
      connectionString="Data Source=server;Initial Catalog=Invoicing;Persist Security Info=True;ID=id;Password=pw" 
      providerName="System.Data.SqlClient" /> 

uygulaması: Burada

benim bağlantı dizesi olduğunu konular. Ayrıca

, ben .NET 2008 ve SQL kullanıyorum 2008.

kimse ne yapacağını üzerinde herhangi bir fikir var mı?

cevap

3

Sadece test muhtemelen değer olup olmadığını aşağıdaki çalışır:

SqlConnection con = new SqlConnection("Data Source=server;Initial Catalog=Invoicing;Persist Security Info=True;ID=id;Password=pw"); 

Bana göre bağlantı dizginiz büyük olasılıkla doğru değil - kullanıcı tarafından sağlanmadı. Eğer TCP/IP etkin söyleyen

+0

Wow, referansımı fiili dizeyle bağlantı dizgisi olarak değiştirdim, şimdi çalışıyor! Teşekkürler!!! Bunun ne olacağını biliyor musun? Ayrıca, Kullanıcı Kimliği kullanmam gerekiyor, sadece ID değil – James

2

"ID" nin doğru olduğunu sanmıyorum. Ben bağlantı dizeleri bunlar için takma bir dizi olduğunu biliyorum, ama her zaman

göz "Kullanıcı Kimliği" kullanmak here

+0

Evet, bunu fark etmedim bile! Teşekkürler! +1 – James

3

ancak Named Pipes devre dışı bıraktınız "Parola = XXXX; Initial Catalog = DBNameHere;; User ID = XXXX Veri Kaynağı = ServerNameHere" : aşağıdaki bağlantı dizesi kullanın? Buna daha önce rastladım ve Sql Server Configuration Manager kullanarak Adlandırılmış Boruları devre dışı bıraktım.

Ayrıca bağlantı dizesinde specify the protocol da kullanabilirsiniz, ayrıca bunu denemek isteyebilirsiniz.

+0

Evet, bunu yapmayı düşünmedim bile. Yine de, ben etkinleştirildim. Bu hala yararlı bir ipucu olduğundan oy verildi! – James

İlgili konular