How to enumerate available database Services(SQLSewrver or Oracle or MySQL or PostgreSQL, etc) in a network in C#? -
After computing the available database service (SQL Server or Oracle or MySQL or PostgreSQL, etc.) in a network using "text" itemprop = "text">
C # How To?
I also need to find my port number and service-instance names.
For example:
class server {#region DLL Inports [DllImport ("Odbc32.dll")] Private static extension short sql aloch handley (lower html, intupet input handles , Out InterPTR Output Handle); [DllImport ("odbc32.dll")] Private static extern short SQLSetEnvAttr (IntPtr henv, int attribute, IntPtr valuePtr, int strLength); [DllImport ("odbc32.dll")] Private Static Extern Small SQLFreeHandle (Small HType, IntPtr Handle); [DllImport ("odbc32.dll", charset = CharSet.Ansi)] Personal Stable Execution Less SQLBrowseConnect (IntPtr hconn, StringBuilder inString, Short inStringLength, StringBuilder outString, Short outStringLength, Out of Line OutLengthNeeded); #endregion #region constants personal const less SQL_HANDLE_ENV = 1; Private Context Small SQL_HANDLE_DBC = 2; Private Const is SQL_ATTR_ODBC_VERSION = 200; Private Constant SQL_OV_ODBC3 = 3; Private Context Small SQL_SUCCESS = 0; Private Context Small SQL_NEED_DATA = 99; Private contact less DEFAULT_RESULT_SIZE = 1024; Private constring string SQL_DRIVER_STR = "Driver = SQL Server"; #endrian # number static string [] GetServers () public static string [] GetNames () {string [] retval = null; String txt = string.Empty; IntPtr henv = IntPtr.Zero; IntPtr hconn = IntPtr.Zero; StringsbilderInstring = new stringbilder (SQL_DRIVER_STR); Stringbuilder outstretching = new string builder (DEFAULT_RESULT_SIZE); Small inStringLength = (short) inString.Length; Small lenNeeded = 0; Try {if (SQL_SUCCESS == SQLAllocHandle (SQL_HANDLE_ENV, henv, out henv}} {if (SQL_SUCCESS == SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (IntPtr) SQL_OV_ODBC3, 0)) {if (SQL_SUCCESS == SQLAllocHandle (SQL_HANDLE_DBC, henv, out Hconn)) {if (SQL_NEED_DATA == SQLBrowseConnect (hconn, inString, inStringLength, outString, DEFAULT_RESULT_SIZE, outside lenNeeded)} {if (DEFAULT_RESULT_SIZE & lt; lenNeeded) {outString.Capacity = lenNeeded; if (SQL_NEED_DATA = SQLBrowseConnect (hconn, inString , InStringLength, outString, lenNeeded, outside lenNeeded!) {New ApplicationException Throw ("SQL server could be obtained from ODBC driver.");}} Txt = outString.ToString (); Int start = txt.IndexOf (" ") + 1; Int len = txt.IndexOf ("} ") - Start; if ((start> 0) & amp; amp;; (lane> 0)) {txt = txt .Substring (Start, Lane);} and {txt = string.Empty;}}}}}} hold (ex before) {// throw away any errors if we are not in debug mode // # (debug) //MessageBox.Show (Ex.Message, "Acquire SQL Error in Sourver List"); // # endif txt = string.Empty; East; } Finally {if (hconn! = IntPtr.Zero) {SQLFreeHandle (SQL_HANDLE_DBC, hconn); } If (Henv! = IntPtr.Zero) {SQLFreeHandle (SQL_HANDLE_ENV, HCNN); }} If (txt.Length & gt; 0) {retval = txt.Split (",". ToCharArray ()); } Return refund; } #endregion}
This code works only for SqlServers and up to Windows XP.
For other DBMS servers and does not work on Win7.
I need a canonical solution
You also use class for this can do. Keep in mind, this is MS SQL Server specific ...
var results = SqlDataSourceEnumerator.Instance.GetDataSources (); Foreach (var row in results.Rows) {Console.WriteLine ("{0} \ {1}", line ["server name"], line ["instance name"]); }
See this for additional information
Comments
Post a Comment