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

556 lines
26 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
using System.Data.SqlClient;
using HuizhongLibrary.Data;
using HuizhongLibrary.Safety;
using System.Data.Common;
namespace HuizhongLibrary.Common.Configuration
{
public class ConfigurationSourceSection
{
#region 读取数据库连接
/// <summary>
/// 读取数据库连接
/// </summary>
/// <param name="AttributeName">属性名称</param>
public static void GetConnection(string AttributeName)
{ //读取属性值
string filePath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationSourceSection.LoadXml_Attribute(AppDomain.CurrentDomain.BaseDirectory + "Setup.ini", "SetupPath");
if (filePath.Substring(filePath.Length - 1) != "/") filePath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationSourceSection.LoadXml_Attribute(AppDomain.CurrentDomain.BaseDirectory + "Setup.ini", "SetupPath");
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
Config cf =null;
foreach (XmlNode node in nodelist)
{
if (node.Attributes["key"].Value == AttributeName)
{
if (DataCache.ConfigCache.ContainsKey(AttributeName) == false)
{
cf = new Config();
DataCache.ConfigCache.Add(cf);
}
else
{
cf = DataCache.ConfigCache[AttributeName];
}
cf.Key = AttributeName;
try
{
var node2 = node.Attributes.GetNamedItem("NameSpace");
if (node2!=null) cf.Namespace = node.Attributes["NameSpace"].Value;
}
catch
{
cf.Namespace = "System.Data.SqlClient";
}
try
{
cf.Value = CryptoPrivate.Decryp(node.Attributes["value"].Value);
}
catch
{
cf.Value = node.Attributes["value"].Value;
}
}
}
}
#endregion
#region 读取数据库连接
/// <summary>
/// 读取数据库连接
/// </summary>
/// <param name="AttributeName">属性名称</param>
public static void GetConnection2(string AttributeName)
{ //读取属性值
string filePath = AppDomain.CurrentDomain.BaseDirectory + "Setup.ini";
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
Config cf = null;
foreach (XmlNode node in nodelist)
{
if (node.Attributes["key"].Value == AttributeName)
{
if (DataCache.ConfigCache.ContainsKey(AttributeName) == false)
{
cf = new Config();
DataCache.ConfigCache.Add(cf);
}
else
{
cf = DataCache.ConfigCache[AttributeName];
}
cf.Key = AttributeName;
try
{
cf.Namespace = node.Attributes["NameSpace"].Value;
}
catch
{
cf.Namespace = "System.Data.SqlClient";
}
try
{
cf.Value = CryptoPrivate.Decryp(node.Attributes["value"].Value);
}
catch
{
cf.Value = node.Attributes["value"].Value;
}
}
}
}
#endregion
#region 读取XML配置文件-属性值
/// <summary>
/// 返回指点节点指点属性的值,AttributeName属性名称
/// </summary>
/// <param name="filePath">配置文件路径</param>
/// <param name="AttributeName">属性名称</param>
public static string LoadXml_Attribute(string filePath, string AttributeName)
{ //读取属性值
if (System.IO.File.Exists(filePath) == false) return "";
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
foreach (XmlNode node in nodelist)
{
if (node.Attributes["key"].Value == AttributeName)
{
string KeyValue = "";
try
{
KeyValue = CryptoPrivate.Decryp(node.Attributes["value"].Value);
}
catch
{
KeyValue = node.Attributes["value"].Value;
}
return KeyValue;
}
}
return "";
}
#endregion
#region 保存XML配置文件
/// <summary>
///AttributeName属性名称,AttributeValue属性值
/// </summary>
/// <param name="AttributeName">属性名称</param>
/// <param name="AttributeValue">属性值</param>
/// <param name="IsEncrypt">是否加密</param>
public static void SaveXml_Attribute(string filePath, string AttributeName, string AttributeValue, bool IsEncrypt)
{
bool bk = true;
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
//XmlNodeList nodelist = Document.GetElementsByTagName(NodeTypeName);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
foreach (XmlNode node in nodelist)
{
if (node.Attributes["key"].Value == AttributeName)
{
if (IsEncrypt == true) { node.Attributes["value"].Value = CryptoPrivate.Encryp(AttributeValue); }
else { node.Attributes["value"].Value = AttributeValue; }
bk = false;
}
}
if (bk == true)
{
XmlElement Element = Document.CreateElement("add");
XmlAttribute Attrib = null;
Attrib = Document.CreateAttribute("key");
Attrib.Value = AttributeName;
Element.Attributes.Append(Attrib);
Attrib = Document.CreateAttribute("value");
if (IsEncrypt == true) { Attrib.Value = CryptoPrivate.Encryp(AttributeValue); }
else { Attrib.Value = AttributeValue; }
Element.Attributes.Append(Attrib);
nodelist = Document.SelectNodes("child::configuration/appSettings");
nodelist[0].AppendChild(Element);
}
Document.Save(filePath);
}
#endregion
#region 查询服务器上所有数据库
/// <summary>
///查询服务器上所有数据库
/// </summary>
public static DataTable getDataBase(string connectString)
{
// string dn="";
// if (userid != "") { dn = "data source=" + datasource + ";initial catalog=master;user id=" + userid + ";password=" + password; }
// else { dn = "data source=" + datasource + ";initial catalog=master;Integrated Security=True"; }
DataTable tb = new DataTable();
SqlConnection cn = new SqlConnection(connectString);
cn.Open();
cn.ChangeDatabase("master");
SqlCommand cmd = new SqlCommand("select name from sysdatabases order by name asc", cn);
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
#endregion
#region 查询数据库中所有表名
/// <summary>
///查询数据库中所有表名
/// </summary>
public static DataTable getTables(string connectString)
{
DataTable tb = new DataTable();
SqlConnection cn = new SqlConnection(connectString);
cn.Open();
SqlCommand cmd = new SqlCommand("select * from [sysobjects] where xtype='u' order by name asc", cn);//and status>0
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
#endregion
#region 查询数据库中所有表名
/// <summary>
///查询数据库中所有表名
/// </summary>
public static DataTable getTables(string connectString,string DataName)
{
DataTable tb = new DataTable();
SqlConnection cn = new SqlConnection(connectString);
cn.Open();
if (DataName!="") cn.ChangeDatabase(DataName);
SqlCommand cmd = new SqlCommand("select * from [sysobjects] where xtype='u' order by name asc", cn);//and status>0
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
#endregion
#region 查询数据库中所有视图名
/// <summary>
///查询数据库中所有视图名
/// </summary>
public static DataTable getViews(string connectString, string DataName)
{
DataTable tb = new DataTable();
SqlConnection cn = new SqlConnection(connectString);
cn.Open();
cn.ChangeDatabase(DataName);
SqlCommand cmd = new SqlCommand("select v.[name] from sys.views as v, sys.schemas as s where v.schema_id = s.schema_id order by v.name", cn);//and status>0
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
#endregion
#region 检索列
public static DataTable getColumns(string connectString, string TableName)
{
DataTable tb = new DataTable(TableName);
SqlConnection cn = new SqlConnection(connectString);
if (cn.State == ConnectionState.Closed) { cn.Open(); }
int ver = Convert.ToInt32(cn.ServerVersion.Substring(0,2));
string tsql = @"
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sysproperties] d on a.colid=d.smallid and a.id=d.id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
order by a.colorder
";
if (ver > 8)
{
tsql = @"
select a.ColumnName,ColumnType=replace(a.ColumnType,'(-1)','(MAX)'),a.ColumnRemark,a.Type
from (
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end,a.colorder
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
) a
order by a.colorder
";
}
//sql2005以上
/*
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end from [sysobjects] c inner join [syscolumns] a on c.id=a.id inner join [systypes] b on b.xtype=a.xtype left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname' order by a.colorder
*/
SqlCommand cmd = new SqlCommand(tsql, cn);
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = TableName;
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
public static DataTable getColumns2(string connectString, string TableName)
{
DataTable tb = new DataTable(TableName);
SqlConnection cn = new SqlConnection(connectString);
if (cn.State == ConnectionState.Closed) { cn.Open(); }
int ver = Convert.ToInt32(cn.ServerVersion.Substring(0, 2));
string tsql = @"
select ColRemark=d.value,ColName=a.name,ColType=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sysproperties] d on a.colid=d.smallid and a.id=d.id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
order by a.colorder
";
if (ver > 8)
{
tsql = @"
select a.ColName,ColumnType=replace(a.ColumnType,'(-1)','(MAX)'),a.ColRemark,a.ColType
from (
select ColRemark=d.value,ColName=a.name,ColType=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end,a.colorder
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
) a
order by a.colorder
";
}
//sql2005以上
/*
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end from [sysobjects] c inner join [syscolumns] a on c.id=a.id inner join [systypes] b on b.xtype=a.xtype left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname' order by a.colorder
*/
SqlCommand cmd = new SqlCommand(tsql, cn);
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = TableName;
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
public static DataTable getColumns(string connectString, string DataName, string TableName)
{
DataTable tb = new DataTable(TableName);
SqlConnection cn = new SqlConnection(connectString);
if (cn.State == ConnectionState.Closed) { cn.Open(); }
cn.ChangeDatabase(DataName);
int ver = Convert.ToInt32(cn.ServerVersion.Substring(0, 2));
string tsql = @"
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sysproperties] d on a.colid=d.smallid and a.id=d.id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
order by a.colorder
";
if (ver > 8)
{
tsql = @"
select a.ColumnName,ColumnType=replace(a.ColumnType,'(-1)','(MAX)'),a.ColumnRemark,a.Type
from (
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,
ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end,a.colorder
from [sysobjects] c
inner join [syscolumns] a on c.id=a.id
inner join [systypes] b on b.xtype=a.xtype
left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id
where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname'
) a
order by a.colorder
";
}
//sql2005以上
/*
select ColumnRemark=d.value,ColumnName=a.name,Type=b.name,ColumnType=case when b.name='varchar' or b.name='nvarchar' then b.name+'('+cast(a.Length as varchar(10))+')' when b.name='varchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(10))+'('+cast(a.Length as varchar(10))+')' end from [sysobjects] c inner join [syscolumns] a on c.id=a.id inner join [systypes] b on b.xtype=a.xtype left join [sys].[extended_properties] d on a.colid=d.[minor_id] and a.id=d.major_id where c.xtype='u' and c.name<>'dtproperties' and c.name=@TableName and b.name<>'sysname' order by a.colorder
*/
SqlCommand cmd = new SqlCommand(tsql, cn);
cmd.Parameters.Add("@TableName", SqlDbType.VarChar).Value = TableName;
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(tb);
cn.Close();
return tb;
}
#endregion
#region 判断列是否存在
public static int CheckColumnName(string connectString,string TableName, string ColName)
{
string tsql = @"
select name=case when b.name='varchar' or b.name='nvarchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+')' when b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(50)) end from syscolumns a
inner join [systypes] b on a.xtype=b.xtype
where a.id=object_id('" + TableName + @"') and a.name='" + ColName + @"'
";
Database db = new Database(connectString);
db.IsCheckKeyword = false;
DbCommand cmd = db.GetSqlStringCommand(tsql);
string a = Convert.ToString(db.ExecuteScalar(cmd));
if (string.IsNullOrEmpty(a) == true) return 0; //不存在
return 1; //存在
}
#endregion
#region 判断列是否存在
public static int CheckColumnName(string TableName, string ColName)
{
string tsql = @"
select name=case when b.name='varchar' or b.name='nvarchar' or b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+')' when b.name='decimal' then b.name+'('+cast(a.prec as varchar(10))+','+cast(a.xscale as varchar(10))+')' else cast(b.name as varchar(50)) end from syscolumns a
inner join [systypes] b on a.xtype=b.xtype
where a.id=object_id('" + TableName + @"') and a.name='" + ColName + @"'
";
Database db = DatabaseFactory.CreateDatabase();
db.IsCheckKeyword = false;
DbCommand cmd = db.GetSqlStringCommand(tsql);
string a = Convert.ToString(db.ExecuteScalar(cmd));
if (string.IsNullOrEmpty(a) == true) return 0; //不存在
return 1; //存在
}
#endregion
#region 执行SQL语句
public static void ExecuteNonQuery(string tsql)
{
if (string.IsNullOrEmpty(tsql) == true) return;
Database db = DatabaseFactory.CreateDatabase();
db.IsCheckKeyword = false;
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.ExecuteNonQuery(cmd);
}
#endregion
#region 获取数据库名
public static string GetDataBaseName(string connectString)
{
SqlConnection cn = new SqlConnection(connectString);
return cn.Database;
}
#endregion
#region 表去除自增列
public static void Set_Table_AutoIncrement_ON(string tbName)
{
if (string.IsNullOrEmpty(tbName) == true) return;
string tsql = "SET IDENTITY_INSERT ["+ tbName + "] ON";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.ExecuteNonQuery(cmd);
}
#endregion
#region 表恢复自增列
public static void Set_Table_AutoIncrement_OFF(string tbName)
{
if (string.IsNullOrEmpty(tbName) == true) return;
string tsql = "SET IDENTITY_INSERT [" + tbName + "] OFF";
Database db = DatabaseFactory.CreateDatabase();
DbCommand cmd = db.GetSqlStringCommand(tsql);
db.ExecuteNonQuery(cmd);
}
#endregion
#region "读取XML配置文件-属性值"
/// <summary>
/// 返回指点节点指点属性的值,AttributeName属性名称
/// </summary>
/// <param name="filePath">配置文件路径</param>
/// <param name="AttributeName">属性名称</param>
public static string LoadXml_Attribute(string filePath, string AttributeName, string NameSpace)
{ //读取属性值
if (System.IO.File.Exists(filePath) == false) return "";
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
foreach (XmlNode node in nodelist)
{
if (node.Attributes["key"].Value == AttributeName && node.Attributes["NameSpace"].Value == NameSpace)
{
string KeyValue = "";
try
{
KeyValue = CryptoPrivate.Decryp(node.Attributes["value"].Value);
}
catch
{
KeyValue = node.Attributes["value"].Value;
}
return KeyValue;
}
}
return "";
}
#endregion
#region "保存XML配置文件"
/// <summary>
///AttributeName属性名称,AttributeValue属性值
/// </summary>
/// <param name="AttributeName">属性名称</param>
/// <param name="AttributeValue">属性值</param>
/// <param name="IsEncrypt">是否加密</param>
public static void SaveXml_Attribute(string filePath, string AttributeName, string AttributeValue, string NameSpace, bool IsEncrypt)
{
bool bk = true;
XmlDocument Document = new XmlDocument();
Document.Load(filePath);
//XmlNodeList nodelist = Document.GetElementsByTagName(NodeTypeName);
XmlNodeList nodelist = Document.SelectNodes("child::configuration/appSettings/add");
foreach (XmlNode node in nodelist)
{
if (node.Attributes["NameSpace"] == null)
{
node.Attributes.Append(Document.CreateAttribute("NameSpace"));
}
if (node.Attributes["key"].Value == AttributeName && node.Attributes["NameSpace"].Value == NameSpace)
{
if (IsEncrypt == true) { node.Attributes["value"].Value = CryptoPrivate.Encryp(AttributeValue); }
else { node.Attributes["value"].Value = AttributeValue; }
bk = false;
}
}
if (bk == true)
{
XmlElement Element = Document.CreateElement("add");
XmlAttribute Attrib = null;
Attrib = Document.CreateAttribute("key");
Attrib.Value = AttributeName;
Element.Attributes.Append(Attrib);
Attrib = Document.CreateAttribute("value");
if (IsEncrypt == true) { Attrib.Value = CryptoPrivate.Encryp(AttributeValue); }
else { Attrib.Value = AttributeValue; }
Element.Attributes.Append(Attrib);
Attrib = Document.CreateAttribute("NameSpace");
Attrib.Value = NameSpace;
Element.Attributes.Append(Attrib);
nodelist[0].ParentNode.AppendChild(Element);
}
Document.Save(filePath);
}
#endregion
}
}