Arkadaşlar, projemde seçtiğim instance'ın veritabanlarını comboboxa doldurmak istiyorum. Combobox'dan da seçtiğim veritabanının backup'ını alıyorum, projem özetle böyle. Sorunum şu ki seçilen serverın veritabanlarını comboboxa dolduruyorum fakat sistem veritabanlarıda(tempdb,master...) comboboxa geliyor. Ben sistem veritabanları gelsin istemiyorum. Özel bir bildiğiniz yöntem var mı? Hani sistem veritabanlarının ortak bir uzantısı yada belirteci olur ona göre yapabilirim. Bayadır araştırıyorum ama bulamadım. Teşekkür ederim...

soruldu: 23 May '14, 04:23

hayriali's gravatar image

hayriali
714612
cevap kabul oranı: 0%


Ms-Sql zaten 6 database oluşturuyor. Bunlarda, oluşturulan ilk 6 database oluyor. dolayısı ile;

SELECT * FROM sys.databases where database_id>6

işini çözecektir diye düşünüyorum.

permanent link

cevaplandı: 23 May '14, 06:17

SaRPaRDa's gravatar image

SaRPaRDa
5.0k213165
cevap kabul oranı: 27%

Evet haklısın yalnız bu query sql tarafında çözüm oldu. Comboboxa dolarken sıralı yani önce sistem veritabanlarını altına diğer veritabanlarını doldurmayıp, karışık dolduruyor. Dolayısıyla core tarafında işe yaramıyor, olmadı sistem db'leri çekip collection nesnesine atıp diğerinden silebilirim. Cevap için teşekkür ederim fikir verdi.

(23 May '14, 06:46) hayriali hayriali's gravatar image
2

Bu sorgu ile zaten sistem databaselerini almıyorsun. Oluşturduğun database'lerin listesini alıyorsun. Sistem databaseleri önce gelsin diğerleri sonra gelsin istiyorsan da

SELECT * FROM sys.databases order by database_id

(23 May '14, 06:51) SaRPaRDa SaRPaRDa's gravatar image

Tabi tabi de, ben veritabanlarını doldururken sql komutu kullanmadım, bir tane server nesnesi tanımlayıp onun metodlarını kullanarak gittim.

//nesne// ServerConnection cnn = new ServerConnection(cmbxServer.SelectedItem.ToString()); Server oServer = new Server(cnn);

//db'leri çekmek için kullandığım oServer nesnesinin metodu veritabanı.Add(oServer.Databases[i].Name);

Böyle yazdığım zaman gelen server ismine göre login olup, server'daki db'leri otomatik olarak getiriyor. Yani query ile doldurmadım.

(23 May '14, 07:00) hayriali hayriali's gravatar image
private void btnConnect_Click(object sender, EventArgs e)
    {
        try
        {
            ServerConnection cnn = new ServerConnection(cmbxServer.SelectedItem.ToString());
            Server oServer = new Server(cnn);
            ArrayList veritabanı = new ArrayList();

switch (cmbxAuth.SelectedIndex)
            {
                case 0://win auth

cnn.LoginSecure = true;

for (int i = 0; i < oServer.Databases.Count; i++)
                    {
                        veritabanı.Add(oServer.Databases[i].Name);
                    }
                    for (int i = 0; i < veritabanı.Count; i++)
                    {
                        cmbxDb.Items.Add(veritabanı[i]);
                    }
                    break;

case 1://sqlserver auth
                    cnn.LoginSecure = false;
                    cnn.Login = txtLog.Text;
                    cnn.Password = txtPass.Text;
                    cnn.ServerInstance = cmbxServer.Text;

for (int i = 0; i < oServer.Databases.Count; i++)
                    {
                        veritabanı.Add(oServer.Databases[i].Name); //dblerin isimlerini liste attım
                    }
                    for (int i = 0; i < veritabanı.Count; i++)
                    {
                        cmbxDb.Items.Add(veritabanı[i]); //cmbxa da listi ekledim.
                    }
                    break;
                default:
                    break;
            }
            MessageBox.Show("Bağlantı Başarılı");
        }
        catch (Exception)
        {
            throw;
        }

}

// for döngüsüyle oynayabilirim doldururken ama sıralı gelmediği için fail olmakta.SQL ile çekemem çünkü localde çalışmıyorum instance'lar değişiyor.

(23 May '14, 07:08) hayriali hayriali's gravatar image
4

@hayriali, başta sorduğunuz soru ile şimdi istedikleriniz farklı. Neden en başta tam olarak ne istediğinizi yazmıyorsunuz?

(23 May '14, 07:31) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

Haklısınız daha dikkatli olurum kodu açık ve net şekilde yazmalıydım sanırım biraz acele ettim kusura bakmayın

(23 May '14, 07:52) hayriali hayriali's gravatar image
6 yorumdan 5 tanesi gösteriliyor hepsini göster
foreach (Database db in oServer.Databases)
{
    if (db.IsSystemObject == false)
    {
        cmbxDb.Items.Add(db.Name);
    }
}

Arkadaşlar projeyi smo namespace ile yaptığım için sistemobject diye metodu varmış,böylece direk olarak sistem objelerine erişebiliyoruz. Kolay gelsin....

permanent link

cevaplandı: 27 May '14, 06:38

hayriali's gravatar image

hayriali
714612
cevap kabul oranı: 0%

değiştirildi: 27 May '14, 06:43

AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AliRıza Adıyahşi ♦
7.9k146288

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×77
×53

Soruldu: 23 May '14, 04:23

Görüntüleme: 865 kez

Son güncelleme: 27 May '14, 06:43

powered by BitNami OSQA