纽威
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.
 
 
 
 
 

433 lines
16 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Reflection;
using System.IO;
using System.Diagnostics;
using System.Data.SqlClient;
using System.Data;
using System.Data.Common;
using System.Threading.Tasks;
//using NFine.Data.Extensions;
namespace ICSSoft.FromERP
{
public class ICSHelper
{
private static log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static string GetConnectString()
{
try
{
string connectionString = GetConfigString("SysConnectionString");
return connectionString;
}
catch (Exception)
{
throw;
}
}
public static string GetPLMConnectString()
{
try
{
string connectionString = GetConfigString("SysPlmConnectionString");
return connectionString;
}
catch (Exception)
{
throw;
}
}
public static string GetERPConnectString()
{
try
{
string connectionString = GetConfigString("SysErpConnectionString");
return connectionString;
}
catch (Exception)
{
throw;
}
}
public static string GetConfigString(string name)
{
try
{
Configuration config = GetConfig();
string configString = config.ConnectionStrings.ConnectionStrings[name].ConnectionString.ToString();
return configString;
}
catch (Exception)
{
throw;
}
}
public static Dictionary<string, string> GetConfigString()
{
try
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
Configuration config = GetConfig();
var settings = config.AppSettings.Settings;
foreach (var key in settings.AllKeys)
{
string value = settings[key].Value.ToString();
dictionary.Add(key.ToString(), value);
}
return dictionary;
}
catch (Exception)
{
throw;
}
}
public static Configuration GetConfig()
{
Assembly assembly = Assembly.GetCallingAssembly();
string path = string.Format("{0}.config", assembly.Location);
if (!File.Exists(path))
{
throw new FileNotFoundException(path + "路径下的文件未找到!");
}
try
{
ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
configFile.ExeConfigFilename = path;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);
return config;
}
catch (Exception)
{
throw;
}
}
public static void Log(string name)
{
string procName = Process.GetCurrentProcess().ProcessName;
using (PerformanceCounter pc = new PerformanceCounter("Process", "Private Bytes", procName))
{
log.Warn(name + "-当前程序内存占用:" + pc.NextValue());
}
long memoryUsed = GC.GetTotalMemory(true);
log.Warn(name + "-内存占用:" + memoryUsed);
}
public static string Time(string Namespace, string Class, string WorkPoint, string sql, string TempTableName)
{
try
{
string value = @"DECLARE @LastTime datetime='2000-01-01'
--同步时间表不存在插入记录
IF NOT EXISTS(SELECT ID FROM ICSERPTime WHERE Namespace='{0}' AND Class='{1}' AND WorkPoint='{2}')
BEGIN
INSERT INTO ICSERPTime VALUES('{0}','{1}',CONVERT(VARCHAR(10),@LastTime,23),CONVERT(VARCHAR(10),@LastTime,24),GETDATE(),'{2}',@LastTime)
END
--取出最后同步日期
SELECT @LastTime=DateTime FROM ICSERPTime WHERE Namespace='{0}' AND Class='{1}' AND WorkPoint='{2}'
--根据时间过滤所需数据放入临时表,必须要有MTIME字段
{3}
--从临时表取出最后修改日期
SELECT @LastTime=MAX(MTIME) FROM {4}
--更新时间表同步日期
UPDATE ICSERPTime SET Date=CONVERT(VARCHAR(10),@LastTime,23),Time=CONVERT(VARCHAR(10),@LastTime,24),DateTime=@LastTime,MTIME=GETDATE() WHERE Namespace='{0}' AND Class='{1}' AND WorkPoint='{2}'
";
return string.Format(value, Namespace, Class, WorkPoint, sql, TempTableName);
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw;
}
}
public static string InsertSQL(string TableName, Dictionary<string, string> values)
{
try
{
string col = string.Empty;
string value = string.Empty;
foreach (var item in values)
{
col += item.Key + ",";
value += item.Value + ",";
}
if (!string.IsNullOrWhiteSpace(value))
{
return string.Format("INSERT INTO {0} ({1}) SELECT {2} FROM ", TableName, col.TrimEnd(','), value.TrimEnd(','));
}
return value;
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw;
}
}
public static string UpdateSQL(string TableName, Dictionary<string, string> values)
{
try
{
string value = string.Empty;
foreach (var item in values)
{
value += item.Key +"="+ item.Value + ",";
}
if (!string.IsNullOrWhiteSpace(value))
{
return string.Format("UPDATE {0} SET {1} FROM ", TableName, value.TrimEnd(','));
}
return "";
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw;
}
}
public static void ExecuteDate(string conStr, string sql)
{
try
{
using (SqlConnection con = new SqlConnection(conStr))
{
con.Open();
try
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
using (SqlTransaction tran = con.BeginTransaction())
{
using (SqlCommand command = new SqlCommand())
{
command.Connection = con;
command.Transaction = tran;
command.CommandTimeout = 100;
command.CommandText = sql;
try
{
int result = command.ExecuteNonQuery();
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
log.Error( ex.ToString() + Environment.NewLine + "异常SQL:" + Environment.NewLine + sql);
}
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw ex;
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
con.Dispose();
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw ex;
}
}
/// <summary>
/// 获取拼音
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string GetPYString(string str)
{
string tempStr = "";
foreach (char c in str)
{
if ((int)c >= 33 && (int)c <= 126)
{//字母和符号原样保留
tempStr += c.ToString();
}
else
{//累加拼音声母
tempStr += GetPYChar(c.ToString());
}
}
return tempStr;
}
///
/// 取单个字符的拼音声母
///
/// 要转换的单个汉字
/// 拼音声母
public static string GetPYChar(string c)
{
byte[] array = new byte[2];
array = System.Text.Encoding.Default.GetBytes(c);
int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));
if (i < 0xB0A1) return "*";
if (i < 0xB0C5) return "a";
if (i < 0xB2C1) return "b";
if (i < 0xB4EE) return "c";
if (i < 0xB6EA) return "d";
if (i < 0xB7A2) return "e";
if (i < 0xB8C1) return "f";
if (i < 0xB9FE) return "g";
if (i < 0xBBF7) return "h";
if (i < 0xBFA6) return "j";
if (i < 0xC0AC) return "k";
if (i < 0xC2E8) return "l";
if (i < 0xC4C3) return "m";
if (i < 0xC5B6) return "n";
if (i < 0xC5BE) return "o";
if (i < 0xC6DA) return "p";
if (i < 0xC8BB) return "q";
if (i < 0xC8F6) return "r";
if (i < 0xCBFA) return "s";
if (i < 0xCDDA) return "t";
if (i < 0xCEF4) return "w";
if (i < 0xD1B9) return "x";
if (i < 0xD4D1) return "y";
if (i < 0xD7FA) return "z";
return "*";
}
/// <summary>
/// 返回一个数据表
/// </summary>
/// <param name="connectionString">数据库连接字符串</param>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">SQL语句</param>
/// <param name="commandParameters">参数</param>
/// <param name="strTableName">数据表名</param>
/// <param name="bIsLoadStru">是否加载数据表结构</param>
/// <returns></returns>
public static DataTable ExecuteTable(string connection, string cmdText)
{
try
{
using (SqlConnection con = new SqlConnection(connection))
{
con.Open();
try
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
using (SqlCommand command = new SqlCommand())
{
command.CommandText = cmdText;
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(command);
da.SelectCommand.Connection = con; //加上这个
//da.FillSchema(ds, SchemaType.Source);
da.Fill(ds);
return ds.Tables[0];
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw ex;
}
finally
{
if (con.State == ConnectionState.Open)
con.Close();
con.Dispose();
}
}
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw ex;
}
}
/// <summary>
/// 依靠数据库连接字符串connectionString,
/// 使用所提供参数,执行返回首行首列命令
/// </summary>
/// <param name="commandType">执行命令的类型(存储过程或T-SQL,等等)</param>
/// <param name="commandText">存储过程名称或者T-SQL命令行</param>
/// <returns>返回一个对象,使用Convert.To{Type}将该对象转换成想要的数据类型。</returns>
public static object ExecuteScalar(CommandType cmdType, string cmdText)
{
try
{
DbCommand cmd = new SqlCommand(); ;
string conStr = GetConnectString();
using (DbConnection connection = new SqlConnection(conStr))
{
PrepareCommand(cmd, connection, null, cmdType, cmdText, null);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
catch (Exception ex)
{
//log.Error(ex.Message);
throw;
}
}
/// <summary>
/// 为即将执行准备一个命令
/// </summary>
/// <param name="cmd">SqlCommand对象</param>
/// <param name="conn">SqlConnection对象</param>
/// <param name="isOpenTrans">DbTransaction对象</param>
/// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
/// <param name="cmdText">存储过程名称或者T-SQL命令行, e.g. Select * from Products</param>
/// <param name="cmdParms">SqlParameters to use in the command</param>
private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction isOpenTrans, CommandType cmdType, string cmdText, DbParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (isOpenTrans != null)
cmd.Transaction = isOpenTrans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
cmd.Parameters.AddRange(cmdParms);
}
}
public static DataTable GetERPDB(string conStr)
{
try
{
string value = @"SELECT * FROM [dbo].[Sys_WorkPoint]";
return ExecuteTable(conStr, value);
}
catch (Exception ex)
{
log.Error(ex.ToString());
throw;
}
}
}
}