HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

A LAN gépein telepített SQL Server példányok lekérdezése


Példaprogram letöltése

8517 bájt

A Windows NT 4-es verziójától kezdődően rendelkezésünkre áll egy dinamikus könyvtár, a Netapi32.dll, mely számtalan hasznos függvényt tartalmaz egyrészt ahhoz, hogy a lokális számítógépről információkat kérdezzünk le, illetve jellemzőket állítsunk be, másrészt hogy a helyi hálózat számítógépeiről kapjunk hasznos adatokat. Cikkünkben az utóbbi függvénycsoport egyik tagját használjuk fel arra, hogy a LAN számítógépeit feltérképezve lekérdezzük az egyes számítógépeken telepített SQL Server példányokat.

A mellékelt példában a program indulásakor lefuttatjuk a számítógépek pásztázását elvégző függvényt, az eredményt – az SQL Server példányok neveit – a program űrlapján elhelyezett ComboBox kontrolban helyezzük el. Több szerver esetén az aktuálisan kiválasztott elemről töltődik be információ a ListBox kontrolba. A program hálózatba nem kapcsolt számítógépen is kipróbálható.
A Netapi32.dll dinamikus könyvtár NetServerEnum metódusát használjuk fel a cél elérése érdekében. Minden, a függvényhíváshoz szükséges objektum deklarációját a Win32 osztályban helyeztünk el.
A függvénydeklaráció a következő:
[DllImport("netapi32.dll")]
unsafe private static extern uint NetServerEnum(
  [MarshalAs(UnmanagedType.LPWStr)]
  string ServerName, 
  uint level,
  out IntPtr bufptr,
  uint prefmaxlen,
  ref uint entriesread,
  ref uint totalentries,
  uint servertype,
  [MarshalAs(UnmanagedType.LPWStr)]
  string domain, 
  uint resume_handle);
A függvény paraméterei a következő szerepet töltik be:
  • ServerName: a feltérképezendő szerver neve. Jelen esetben NULL, mivel a hálózat valamennyi gépét feltérképezzük.
  • level: a szám értéke függ attól, hogy milyen jellegű információt kérünk az adott szerverről. Jelen esetben ez 101, mert a SERVER_INFO_101 struktúrában tároljuk el a visszakapott adatokat.
  • bufptr: a kapott információra mutató pointer, melyet majd feldolgozunk a függvény meghívása után.
  • prefmaxlen: a kapott információ maximális mérete bájtban. A függvény ezt a memóriaterületet foglalja le a memóriában a kapott információ számára.
  • entriesread: az összes specifikált szerver számát adja vissza.
  • totalentries: a hálózat valamennyi számítógépének (szerverek, munkaállomások) számát adja vissza.
  • servertype: itt adhatjuk meg, hogy milyen szerver, vagy szoftvertípussal rendelkező számítógépet keressen a függvény.
  • domain: a domain neve, melybe a hálózat számítógépei tartoznak. NULL esetén az elsődleges domain kerül átvizsgálásra.
  • resume_handle: nem használt érték, nulla értéket kell megadnunk.
A kapott információra egy pointer mutat. A pointer-t értelmezve meghatározzuk, hogy hány SQL Server példányról kaptunk információkat. Minden információ egy-egy struktúrában lesz megtalálható. Ez a struktúra a SERVER_INFO_101, melynek menedzselt megfelelője a következő:
[System.Runtime.InteropServices.StructLayoutAttribute (LayoutKind.Sequential, CharSet=CharSet.Auto)]
private struct SERVER_INFO_101 
{ 
Mezőinek értéke a következő információkat hordozza:
A szervert tartalmazó platform azonosítója, mely NT kliens esetén a PLATFORM_ID_NT konstans értéke.
  public int dwPlatformID;
Az SQL Server neve.
  public System.IntPtr lpszServerName;
A szerver verziószámára vonatkozó információ első, és második jegye.
  public int dwVersionMajor;
  public int dwVersionMinor;
A szerver típusa, mely jelen esetben a SV_TYPE_SQLSERVER nevű konstans.
  public int dwType;
Esetleges szerverrel kapcsolatos megjegyzések.
  public int lpszComment;
}
A Win32 osztályunk GetServers() metódusában hívjuk meg a függvényt. Első lépésben deklarálunk egy pointert, mely a kapott struktúrára mutat.
IntPtr ptr = IntPtr.Zero;
A lekérdezendő szervertípusként az említett SV_TYPE_SQLSERVER konstanst adjuk át.
uint nRes = NetServerEnum(null, level, out ptr, prefmaxlen, ref entriesread, ref totalentries, SQLSERVER, null, resume_handle);
A függvény visszatérési értéke sikeres lekérdezés esetén nulla. Ha a művelet sikeres volt, és a visszakapott szerverszám nem nulla, akkor a mutatót értelmezzük. Elsőként deklarálunk egy tömböt a szerverek nevei számára.
string[] servers = new string[entriesread];
Deklarálunk egy másik, két-dimenziós tömböt az egyes szerverek tulajdonságai számára. Ez egy osztályszinten deklarált tömb, hogy a ListBox feltöltésekor is elérjük.
serverinfos = new string[entriesread,5];
Példányosítjuk a struktúrát.
SERVER_INFO_101 serverinfo = new SERVER_INFO_101();
És deklarálunk egy újabb pointert, mely végighalad a – több szerver esetén - több struktúrára mutató pointeren.
SERVER_INFO_101* temp;
Az utóbbi pointerbe átmásoljuk a függvény által visszaadott pointert.
temp = (SERVER_INFO_101*)ptr;
Majd a FOR ciklus segítségével végigmegyünk a pointer által mutatott tömbön.
A csak a szerverneveket tároló tömbben elhelyezzük a struktúra első mezőjének értékét.
servers[i] = Marshal.PtrToStringAuto(temp->lpszServerName);
A másik tömbben pedig minden adatot a struktúrából.
serverinfos[i,0] = "Szerver neve: " + Marshal.PtrToStringAuto(temp->lpszServerName);
...
Majd léptetjük a mutatót a következő struktúra memóriaterületének kezdőcímére.
temp++;
A művelet végén fontos, hogy a pointer által lefoglalt memóriaterületet felszabadítsuk. Erre a NetApiBufferFree metódust használjuk, paraméterében a mutatóval.
NetApiBufferFree(ptr);
A program űrlapjának konstruktorában egyszerűen átadjuk adatforrásként a kapott tömböt a ComboBox kontrolnak.
comboBox1.DataSource = Win32.GetServers();

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 422. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |