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.
ERP/NetLibrary/ConfigurationSourceSection.cs

304 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data;
using System.Data.SqlClient;
using NetLibrary.Data;
using NetLibrary.Safety;
namespace NetLibrary.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("ConnectionString") == false)
{
cf = new Config();
DataCache.ConfigCache.Add(cf);
}
else
{
cf = DataCache.ConfigCache["ConnectionString"];
}
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[0].ParentNode.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();
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 检索列
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 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
";
}
//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 "读取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
}
}