You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

237 lines
8.7 KiB

using EasyNet.DBUtility;
using EasyNet.Manager;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
namespace EntityBuilder
{
public class TableHelper
{
/// <summary>
/// 获取局域网内的所有數據庫服务器名称
/// </summary>
/// <returns>服务器名称数组</returns>
public static List<string> GetSqlServerNames()
{
var dataSources = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
var column = dataSources.Columns[@"InstanceName"];
var column2 = dataSources.Columns[@"ServerName"];
var rows = dataSources.Rows;
var Serverlist = new List<string>();
var array = string.Empty;
for (int i = rows.Count - 1; i >= 0; i--)
{
var str2 = rows[i][column2] as string;
if (((!(rows[i][column] is string str)) || (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 static List<string> DatabaseList(string connection)
{
var getCataList = new List<string>();
const string cmdStirng = @"select name from sys.databases where database_id > 4";
var connect = new SqlConnection(connection);
using (var cmd = new System.Data.SqlClient.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 (Exception)
{
throw;
}
finally
{
if (connect != null && connect.State == ConnectionState.Open)
{
connect.Dispose();
}
}
return getCataList;
}
}
public static List<DbTableInfo> GetTables()
{
if (AdoHelper.DbType == DatabaseType.SQLSERVER)
{
return GetMSSQLTables();
}
else if (AdoHelper.DbType == DatabaseType.MYSQL)
{
return GetMySQLTables();
}
else
{
throw new Exception(@"暂时不支持其他數據庫類型");
}
}
/// <summary>
/// 获取列名
/// </summary>
/// <param name="connection"></param>
/// <returns></returns>
public static List<DbTableInfo> GetMSSQLTables()
{
var connection = (SqlConnection)DbFactory.CreateDbConnection(AdoHelper.ConnectionString);
var tablelist = new List<DbTableInfo>();
try
{
if (connection.State == ConnectionState.Closed)
{
connection.Open();
var objTable = connection.GetSchema(@"Tables");
foreach (DataRow row in objTable.Rows)
{
var tb = new DbTableInfo
{
Name = row[2].ToString(),
DbObjectType = row[3].ToString() == @"VIEW" ? DbObjectType.View : DbObjectType.Table
};
tablelist.Add(tb);
}
}
}
catch
{
throw;
}
finally
{
if (connection != null && connection.State == ConnectionState.Closed)
{
connection.Dispose();
}
}
return tablelist;
}
/// <summary>
/// 获取列名
/// </summary>
/// <param name="connection"></param>
/// <returns></returns>
public static List<DbTableInfo> GetMySQLTables()
{
var sql = @"select TABLE_NAME as name from INFORMATION_SCHEMA.`TABLES` WHERE TABLE_SCHEMA = '" + AdoHelper.DbName + @"'";
var m = ManagerFactory.GetManager();
var tablelist = DbManager.Query<DbTableInfo>(sql);
return tablelist;
}
public static List<ColumnInfo> GetColumnField(string TableName)
{
if (AdoHelper.DbType == DatabaseType.SQLSERVER)
{
return GetMSSQLColumnField(TableName);
}
else if (AdoHelper.DbType == DatabaseType.MYSQL)
{
return GetMySQLColumnField(TableName);
}
else
{
throw new Exception(@"暂时不支持其他數據庫類型");
}
}
/// <summary>
/// 獲取字段
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public static List<ColumnInfo> GetMSSQLColumnField(string TableName)
{
var sb = new StringBuilder();
if (TableName.IndexOf(@"OVW") > -1)
{
sb.Append(@" Select c.name As DbColumnName , t.name As DataType,'' AS IsIdentity,'' AS IsPrimarykey, CASE c.isnullable WHEN 1 THEN '√' ELSE '' END as IsNullable ");
sb.Append(@" From SysObjects As o , SysColumns As c , SysTypes As t ");
sb.Append(@" Where o.type in ('u','v') And o.id = c.id And c.xtype = t.xtype AND t.name<>'sysname' And o.Name = '").Append(TableName).Append(@"' ");
}
else
{
sb.Append(@" SELECT a.name as DbColumnName,");
sb.Append(@" b.name as DataType,");
sb.Append(@" CASE COLUMNPROPERTY(a.id,a.name,'IsIdentity') WHEN 1 THEN '√' ELSE '' END as IsIdentity, ");
sb.Append(@" CASE WHEN EXISTS ( SELECT * FROM sysobjects WHERE xtype='PK' AND name IN ( SELECT name FROM sysindexes WHERE id=a.id AND indid IN ( SELECT indid FROM sysindexkeys ");
sb.Append(@" WHERE id=a.id AND colid IN ( SELECT colid FROM syscolumns WHERE id=a.id AND name=a.name ) ) ) ) THEN '√' ELSE '' END as IsPrimarykey,");
sb.Append(@" CASE a.isnullable WHEN 1 THEN '√' ELSE '' END as IsNullable ");
sb.Append(@" FROM syscolumns a ");
sb.Append(@" LEFT JOIN systypes b ON a.xtype=b.xusertype ");
sb.Append(@" INNER JOIN sysobjects c ON a.id=c.id AND c.xtype='U' AND c.name<>'dtproperties' ");
sb.Append(@" LEFT JOIN syscomments d ON a.cdefault=d.id ");
sb.Append(@" WHERE c.name = '").Append(TableName).Append(@"' ");
sb.Append(@" ORDER BY c.name, a.colorder");
}
//使用Mast框架查詢數據
var m = ManagerFactory.GetManager();
var list = DbManager.Query<ColumnInfo>(sb.ToString());
return list;
}
/// <summary>
/// 獲取字段
/// </summary>
/// <param name="TableName"></param>
/// <returns></returns>
public static List<ColumnInfo> GetMySQLColumnField(string TableName)
{
var sb = new StringBuilder();
sb.Append(@" SELECT COLUMN_NAME as DbColumnName,");
sb.Append(@" DATA_TYPE as DataType,");
sb.Append(@" CASE EXTRA WHEN 'auto_increment' THEN '√' ELSE '' END as IsIdentity, ");
sb.Append(@" CASE COLUMN_KEY WHEN 'PRI' THEN '√' ELSE '' END as IsPrimaryKey, ");
sb.Append(@" CASE IS_NULLABLE WHEN 'YES' THEN '√' ELSE '' END as IsNullable ");
sb.Append(@" from INFORMATION_SCHEMA.COLUMNS ");
sb.Append(@" Where table_name = '").Append(TableName).Append(@"' ");
sb.Append(@" AND table_schema = '").Append(AdoHelper.DbName).Append(@"' ");
//使用Mast框架查詢數據
var m = ManagerFactory.GetManager();
var list = DbManager.Query<ColumnInfo>(sb.ToString());
return list;
}
}
}