获得目标服务器中所有数据库名、表名、列名

时间:2021-04-23 13:58:13
  1       /// <summary>
2 /// 获得目标服务器所有数据库名
3 /// </summary>
4 /// <param name="serverName"></param>
5 /// <param name="userName"></param>
6 /// <param name="password"></param>
7 public void getDataBaseNameList(string serverName, string userName, string password)
8 {
9 SQLDMO.Application sqlApplication = new SQLDMO.ApplicationClass();
10 SQLDMO.SQLServer sqlServer = new SQLDMO.SQLServerClass();
11
12 sqlServer.Connect(serverName, userName, password); // 连接服务器
13
14 foreach (SQLDMO.Database databBase in sqlServer.Databases)
15 {
16 if (databBase.Name != null)
17 {
18 this.DataBaseTreeView.Nodes.Add(databBase.Name);
19
20 getDataBaseTableList(serverName, userName, password, databBase.Name);
21 }
22 }
23 }
24
25
26 /// <summary>
27 /// 加载数据库中表
28 /// </summary>
29 /// <param name="serverName">服务器名</param>
30 /// <param name="userName">用户名</param>
31 /// <param name="password">密码</param>
32 /// <param name="dataBaseName">数据库名</param>
33 private void getDataBaseTableList(string serverName, string userName, string password, string dataBaseName)
34 {
35 SQLDMO.SQLServer Server = new SQLDMO.SQLServerClass();
36
37 //连接到服务器
38 Server.Connect(serverName, userName, password);
39
40 //对所有的数据库遍历,获得指定数据库
41 for (int i = 0; i < Server.Databases.Count; i++)
42 {
43 //判断当前数据库是否是指定数据库
44 if (Server.Databases.Item(i + 1, "dbo").Name == dataBaseName)
45 {
46 //获得指定数据库
47 SQLDMO._Database db = Server.Databases.Item(i + 1, "dbo");
48
49 //获得指定数据库中的所有表
50 for (int j = 0; j < db.Tables.Count; j++)
51 {
52 this.DataBaseTreeView.Nodes[i].Nodes.Add(db.Tables.Item(j + 1, "dbo").Name);
53 }
54 }
55 }
56 }
57
58
59 /// <summary>
60 /// 获得表中所有列名
61 /// </summary>
62 /// <param name="serverName">服务器名</param>
63 /// <param name="userName">用户名</param>
64 /// <param name="password">密码</param>
65 /// <param name="tableName">表名</param>
66 /// <param name="dataBaseName">数据库名</param>
67 /// <returns></returns>
68 public string getRowListFromTable(string serverName, string userName, string password, string tableName, string dataBaseName)
69 {
70 string result = string.Empty;
71
72 string connectionString = string.Empty;
73 connectionString += "server=" + serverName;
74 connectionString += ";Pwd=" + password;
75 connectionString += ";UID=" + userName;
76 connectionString += ";Database=" + dataBaseName;
77
78 string commandString = string.Empty;
79 commandString += "select name from syscolumns where id=object_id('";
80 commandString += tableName;
81 commandString += "')";
82
83
84 SqlConnection sqlConnection = new SqlConnection(connectionString);
85 SqlCommand sqlCommand = new SqlCommand(commandString, sqlConnection);
86
87 SqlDataAdapter dataAdapter = new SqlDataAdapter(commandString, sqlConnection);
88
89 DataSet dataSet = new DataSet();
90 dataAdapter.Fill(dataSet);
91
92 DataTable dataTable = dataSet.Tables[0];
93
94 // DataTable dataTable = sqlConnection.GetSchema("Tables");
95 foreach (DataRow row in dataTable.Rows)
96 {
97 result += row[0].ToString() + "-";
98 }
99
100 if (result != null)
101 {
102 return result;
103 }
104 else
105 {
106 return "0";
107 }
108 }

 下面是转载的代码:

       using System.Data.SqlClient;

/// <summary>
/// 获取局域网内的所有数据库服务器名称
/// </summary>
/// <returns>服务器名称数组</returns>
public List<string> GetSqlServerNames()
{
DataTable dataSources = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();

DataColumn column = dataSources.Columns["InstanceName"];
DataColumn column2 = dataSources.Columns["ServerName"];

DataRowCollection rows = dataSources.Rows;
List<string> Serverlist = new List<string>();
string array = string.Empty;
for (int i = 0; i < rows.Count; i++)
{
string str2 = rows[i][column2] as string;
string str = rows[i][column] as string;
if (((str == null) || (str.Length == 0)) || ("MSSQLSERVER" == str))
{
array = str2;
}
else
{
array = str2 + @"/" + str;
}

Serverlist.Add(array);
}

Serverlist.Sort();

return Serverlist;
}

/// <summary>
/// 查询sql中的非系统库
/// </summary>
/// <param name="connection"></param>
/// <returns></returns>
public List<string> databaseList(string connection)
{
List<string> getCataList = new List<string>();
string cmdStirng = "select name from sys.databases where database_id > 4";
SqlConnection connect = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand(cmdStirng, connect);
try
{
if (connect.State == ConnectionState.Closed)
{
connect.Open();
IDataReader dr = cmd.ExecuteReader();
getCataList.Clear();
while (dr.Read())
{
getCataList.Add(dr["name"].ToString());
}
dr.Close();
}

}
catch (SqlException e)
{
//MessageBox.Show(e.Message);
}
finally
{
if (connect != null && connect.State == ConnectionState.Open)
{
connect.Dispose();
}
}
return getCataList;
}

/// <summary>
/// 获取列名
/// </summary>
/// <param name="connection"></param>
/// <returns></returns>
public List<string> GetTables(string connection)
{
List<string> tablelist = new List<string>();
SqlConnection objConnetion = new SqlConnection(connection);
try
{
if (objConnetion.State == ConnectionState.Closed)
{
objConnetion.Open();
DataTable objTable = objConnetion.GetSchema("Tables");
foreach (DataRow row in objTable.Rows)
{
tablelist.Add(row[2].ToString());
}
}
}
catch
{

}
finally
{
if (objConnetion != null && objConnetion.State == ConnectionState.Closed)
{
objConnetion.Dispose();
}

}
return tablelist;
}

/// <summary>
/// 获取字段
/// </summary>
/// <param name="connection"></param>
/// <param name="TableName"></param>
/// <returns></returns>
public List<string> GetColumnField(string connection, string TableName)
{
List<string> Columnlist = new List<string>();
SqlConnection objConnetion = new SqlConnection(connection);
try
{
if (objConnetion.State == ConnectionState.Closed)
{
objConnetion.Open();
}

SqlCommand cmd = new SqlCommand("Select Name FROM SysColumns Where id=Object_Id('" + TableName + "')", objConnetion);
SqlDataReader objReader = cmd.ExecuteReader();

while (objReader.Read())
{
Columnlist.Add(objReader[0].ToString());

}
}
catch
{

}
objConnetion.Close();
return Columnlist;
}

  2:

region   得到所有本地网络中可使用的SQL服务器列表 
/// <summary>
/// 得到所有本地网络中可使用的SQL服务器列表
/// </summary>
/// <param name= "p_strServerList "> 服务器列表 </param>
/// <returns> </returns>
public static bool GetServers(ref string [] p_strServerList)
{
try
{
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
if(sqlServers.Count > 0)
{
p_strServerList = new string[sqlServers.Count];
for(int i=0;i <sqlServers.Count;i++)
{
string srv = sqlServers.Item(i + 1);
if(srv != null)
{
p_strServerList[i] = srv;
}
}
}
return true;
}
catch(Exception ex)
{
throw ex;
}
}

#endregion

#region 得到指定SQL服务器所有数据库的列表
/// <summary>
/// 得到指定SQL服务器所有数据库的列表
/// </summary>
/// <param name= "p_strDataBaseList "> 数据库列表 </param>
/// <param name= "p_strServer "> 服务器名 </param>
/// <param name= "p_strUser "> 用户名 </param>
/// <param name= "p_strPWD "> 密码 </param>
/// <returns> </returns>
public static bool GetDataBases(ref string [] p_strDataBaseList, string p_strServer, string p_strUser, string p_strPWD)
{
try
{
int i = 0;

SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(p_strServer,p_strUser,p_strPWD);

if(srv.Databases.Count > 0)
{
p_strDataBaseList = new string[srv.Databases.Count];

foreach(SQLDMO.Database db in srv.Databases)
{
if(db.Name!=null)
{
p_strDataBaseList[i] = db.Name;
}
i = i + 1;
}
}
return true;
}
catch(Exception ex)
{
throw ex;
}
}

#endregion

#region 得到所有的存储过程
/// <summary>
/// 得到所有的存储过程
/// </summary>
/// <param name= "p_strProcedureList "> 存储过程列表 </param>
/// <param name= "p_strServer "> 服务器名 </param>
/// <param name= "p_strUser "> 用户名 </param>
/// <param name= "p_strPWD "> 密码 </param>
/// <param name= "p_strDataBase "> 数据库名 </param>
/// <returns> </returns>
public static bool GetProcedures(ref string [] p_strProcedureList, string p_strServer, string p_strUser, string p_strPWD, string p_strDataBase)
{
try
{
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(p_strServer,p_strUser,p_strPWD);

for(int i=0;i <srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1, "dbo ").Name == p_strDataBase)
{
SQLDMO._Database db= srv.Databases.Item(i+1, "dbo ");
if (db.StoredProcedures.Count > 0)
{
p_strProcedureList = new string[db.StoredProcedures.Count];

for(int j=0;j <db.StoredProcedures.Count;j++)
{
p_strProcedureList[j] = db.StoredProcedures.Item(j+1, "dbo ").Name;
}
break;
}
}
}

return true;
}
catch(Exception ex)
{
throw ex;
}
}
#endregion

#region 得到所有的Tables集合
/// <summary>
/// 得到所有的Tables集合
/// </summary>
/// <param name= "p_strProcedureList "> Tables集合 </param>
/// <param name= "p_strServer "> 服务器名 </param>
/// <param name= "p_strUser "> 用户名 </param>
/// <param name= "p_strPWD "> 密码 </param>
/// <param name= "p_strDataBase "> 数据库名 </param>
/// <returns> </returns>
public static bool GetTables(ref string [] p_strTableList, string p_strServer, string p_strUser, string p_strPWD, string p_strDataBase)
{
try
{
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(p_strServer,p_strUser,p_strPWD);

for(int i=0;i <srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1, "dbo ").Name == p_strDataBase)
{
SQLDMO._Database db= srv.Databases.Item(i+1, "dbo ");
if (db.Tables.Count > 0)
{
p_strTableList = new string[db.Tables.Count];

for(int j=0;j <db.Tables.Count;j++)
{
p_strTableList[j] = db.Tables.Item(j+1, "dbo ").Name;
}
break;
}
}
}

return true;
}
catch(Exception ex)
{
throw ex;
}
}
#endregion

#region 得到所有的Views集合
/// <summary>
/// 得到所有的Views集合
/// </summary>
/// <param name= "p_strProcedureList "> Views集合 </param>
/// <param name= "p_strServer "> 服务器名 </param>
/// <param name= "p_strUser "> 用户名 </param>
/// <param name= "p_strPWD "> 密码 </param>
/// <param name= "p_strDataBase "> 数据库名 </param>
/// <returns> </returns>
public static bool GetViews(ref string [] p_strViewList, string p_strServer, string p_strUser, string p_strPWD, string p_strDataBase)
{
try
{
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(p_strServer,p_strUser,p_strPWD);

for(int i=0;i <srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1, "dbo ").Name == p_strDataBase)
{
SQLDMO._Database db= srv.Databases.Item(i+1, "dbo ");
if (db.Views.Count > 0)
{
p_strViewList = new string[db.Views.Count];

for(int j=0;j <db.Views.Count;j++)
{
p_strViewList[j] = db.Views.Item(j+1, "dbo ").Name;
}
break;
}
}
}

return true;
}
catch(Exception ex)
{
throw ex;
}
}
#endregion