PDA

View Full Version : جستجو پایگاه داده



jeividmoti
چهارشنبه 22 مهر 1394, 15:15 عصر
سلام دوستان
برنامه من قسمتی داره که آی پی سرور را بدهیم باید لیست دیتا بیس ها را برگرداند ولی هیچ توضیحی در اینترنت نیست
لطفا کمک کنید

hamzehsh
جمعه 24 مهر 1394, 09:36 صبح
دوست عزیز
اگر اشتباه نکنم منظور شما رو
1- براي لیست سرور های SQL server مي توانيد از كد زير استفاده كرد كه ليست را از رجيستري دريافت مي كند (البته using Microsoft.win32 يادت نره)


RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"Software\Micros oft\Microsoft SQL Server\Instance Names\SQL", false);
foreach (string s in reg.GetValueNames())
{
if (s == "MSSQLSERVER")
{
comboBox_listDB.Items.Add(System.Net.Dns.GetHostNa me());
}
else
{
comboBox_listDB.Items.Add(@".\" + s);
}
}






2- و براي بدست آوردن ديتابيس هاي موجود در سرور هم از پروسيجر sp_databases در ديتابيس master استفاده كنيد . مانند كد زير :

SqlConnection con = new SqlConnection(@"Data Source=" + txt_ConStr.Text + ";Initial Catalog=master;Integrated Security=True");

SqlCommand cmd = new SqlCommand();

con.Open();

cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_databases";


SqlDataReader dr = cmd.ExecuteReader();


while (dr.Read())
{
listBox_DBList.Items.Add(dr.GetString(0));
}






3- برای به دست آوردن لیست دیتابیس های لوکال و شبکه داخلی هم میتونید ازSystem.Data.Sql.SqlDataSourceEnumerator.Instan ce.GetDataSources استفاده کنید.


4- کد زیر نام کلیه سرورهای موجود در شبکه محلی رو براتون میاره
این کد ها رو تو یک کلاس به اسم Servers کپی کنید.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management;
public class Servers
{
public static ServerInstance[] EnumerateServers()
{
return EnumerateServers("");
}

public static ServerInstance[] EnumerateServers(string computerName)
{
DataTable tableServers = null;
if (computerName.Length == 0) {
tableServers = Smo.SmoApplication.EnumAvailableSqlServers;
} else {
tableServers = SmoApplication.EnumAvailableSqlServers(computerNam e);
}
ServerInstance[] list = new ServerInstance[tableServers.Rows.Count];
for (int index = 0; index <= tableServers.Rows.Count - 1; index++) {
DataRow row = tableServers.Rows[index];
string name = row["Name"].ToString();
string server = row["Server"].ToString();
string instance = row["Instance"].ToString();
bool clustered = row["IsClustered"].ToString();
bool local = row["IsLocal"].ToString();
ServerInstance entry = new ServerInstance(name, server, instance, clustered, local);
list[index] = entry;
}
return list;
}
public class ServerInstance
{
public ServerInstance(string name, string server, string instance, bool clustered, bool local)
{
m_name = name;
m_server = server;
m_instance = instance;
m_clustered = clustered;
m_local = local;
}
private string m_name = "";
public string Name {
get { return m_name; }
set { m_name = value; }
}
private string m_server = "";
public string Server {
get { return m_server; }
set { m_server = value; }
}
private string m_instance = "";
public string Instance {
get { return m_instance; }
set { m_instance = value; }
}
private bool m_clustered;
public bool IsClustered {
get { return m_clustered; }

set { m_clustered = value; }
}
private bool m_local;
public bool IsLocal {
get { return m_local; }
set { m_local = value; }

}

}

}


5- اینم یک روش خیلی ساده



namespace Test

{

class MainClass
{
public static void Main ()
{
System.Data.DataTable DT = System.Data.Sql.SqlDataSourceEnumerator.Instance.G etDataSources();
int i = 0;

foreach(System.Data.DataRow DR in DT.Rows)
System.Console.WriteLine("Server[{0}]:{1}\t{2}\t{3}\t{4}",(++i).ToString(), DR[0],DR[1],DR[2],DR[3]);
}

}
}