2016-04-11 27 views
1

Metin kutusu metninden doldurulmuş bir genel bağlantı dizesi istiyorum.Ortak SQL Bağlantı Dizesi Alan Başlatıcı'yı kullanarak

public static string conString ="server=" + tb_serverinfo.Text + "; database=master;user=" + tb_user.Text + ";pwd=" + tb_password.Text + ";Connection Timeout=5"; 

Bunun nedeni

Önem Kod Açıklama Proje Dosyası Satır Giderme Devlet Bir alan başlatıcısı başvuramaz Hata CS0236 statik olmayan alan, yöntem veya özellik 'Database_Tool.tb_serverinfo çalışmaz 'Veri Tabanı Aracı C: \ Kullanıcılar ... 120 Aktif

C#' da yeniyim, bu yüzden her zaman sorunu çözmek için ne yapmam gerektiğini anlayamıyorum.

Sonuç olarak, herkese açık bir SQL bağlantısı istiyorum, böylece bir try bildirimi ve conn.open herhangi bir yere yapabilirim ancak daha sonra deneyeceğim.

Teşekkürler!

+0

Temel olarak statik alanlar ile örnek alanları arasındaki farkı okumanızı öneririm. Ayrıca bir genel SqlConnection değişkenine sahip olmanızı öneriyorum - bunun yerine, talep üzerine bir SqlConnection (Açma Bağlantısı) açan bir yönteme sahip olabilirsiniz ve sonra ihtiyacınız olan her yerden bu işlemi çağırabilir, ancak bu işlemle bağlantıyı bitirdiğinizde bağlantıyı kapatabilirsiniz. –

+0

@JonSkeet Bunu okuyacağım, teşekkürler. Yapmak istediğim şey bu, açık ve kapalı bir denemedir. – SCramphorn

cevap

3

Hata oldukça açık görünüyor. Statik olmayan (tüm örnekler için aynı) değişkenini statik olmayan (farklı örnekler için farklı) verilerden başlatmaya çalışıyorsunuz. ...

public string conString 
{ 
    get{ 
     return "server=" 
      + tb_serverinfo.Text 
      + "; database=master;user=" 
      + tb_user.Text 
      + ";pwd=" 
      + tb_password.Text 
      + ";Connection Timeout=5"; 
    } 
} 

Sonunda bir kamu SQL Bağlantısı istiyorum

Kötü fikir: bağlantı dizesini inşa edecek bir statik olmayan işlevi veya özelliği ihtiyaç gibi geliyor. Bağlantılar .NET tarafından havuzlanır, bu yüzden bir tane oluşturmak genellikle pahalı bir süreç değildir. "Paylaşılan" bağlantınızın açık olup olmadığını anlamaya çalışırken enerjiyi boşa harcamak yerine, bağlantı dizgisini, vb. Ayarlamak. İhtiyaç duyduğunuzda, açtığınızda, eşyalarınızı yapmakta ve elden çıkarmanız daha iyidir. işin bittiğinde.

bunu etkili bir yöntem bir using bloğu ile geçerli:

using(var conn = new SqlConnection(conString)) 
{ 
    using(var cmd = new SqlCommand(sql, conn)) 
    { 
     conn.Open(); 
     ... use the command 
    } // cmd is disposed 
} // conn is disposed 

Bu şekilde her şey bir istisna olsa bile, güzelce temizlenir.

+0

Çok teşekkürler! Bir bağlantının bu parametrelerini kullanıp kullanmadığını belirlemek için bir if ifadesinin olması mümkün mü? Kullanıcının SQL Kimlik Doğrulaması/Windows için bir onay kutusu olmasını istiyorum, yani IF onay kutusu.ticked = true sonra bu dizeyi kullan, başka birini kullan? – SCramphorn

+0

Elbette - iki farklı özellik veya tüm olası parametreleri alan ve uygun dizeyi döndüren bir işlev veya başka bir işleviniz olabilir. Bir şeyler dene ve belirli problemlerle geri dönün. –