Example #1
0
        /// <summary>
        /// 获取Web.config或App.config的connectionStrings节点的值。
        /// </summary>
        public static string GetConn(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                name = DB.DefaultConn;
            }
            if (name.Trim().Contains(" "))
            {
                return(name);
            }
            if (connConfigs.ContainsKey(name))
            {
                return(connConfigs[name]);
            }
            ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings[name];

            if (conn != null)
            {
                string connString = conn.ConnectionString;
                if (name == connString || string.IsNullOrEmpty(connString))//避免误写自己造成死循环。
                {
                    return(name);
                }


                if (connString.EndsWith(".txt") || connString.EndsWith(".ini") || connString.EndsWith(".json"))
                {
                    return(ConnConfigWatch.Start(name, connString));
                }
                //允许配置文件里加密。
                if (connString.Length > 32 && connString.Split(';', '=', ' ').Length == 1)
                {
                    connString = EncryptHelper.Decrypt(connString);
                }
                //启动高可用配置加载方式
                if (connString.Length < 32 && connString.Split(' ').Length == 1)
                {
                    return(GetConn(connString));
                }
                if (!connConfigs.ContainsKey(name))
                {
                    connConfigs.Add(name, connString);
                }
                return(connString);
            }
            if (name.Length > 32 && name.Split('=').Length > 3 && name.Contains(";")) //链接字符串很长,没空格的情况 txt path={0}
            {
                return(name);
            }
            if (name == "Conn" && name != DB.DefaultConn)
            {
                return(GetConn(DB.DefaultConn));
            }
            return("");
        }
Example #2
0
 public void Add(HttpCookie cookie, bool appendToReponse)
 {
     if (!appendToReponse)
     {
         dic.Add(cookie.Name, cookie);
         return;
     }
     if (context != null && cookie != null)
     {
         Append(cookie.Name, cookie.Value, cookie.ToCookieOptions());
     }
 }
Example #3
0
 private static void SetBaseKey(string baseKey, string key)
 {
     //baseKey是表的,不包括视图和自定义语句
     if (_MemCache.CacheType == CacheType.LocalCache)
     {
         if (cacheKeys.ContainsKey(baseKey))
         {
             cacheKeys[baseKey] = cacheKeys[baseKey].Append("," + key);
         }
         else
         {
             cacheKeys.Add(baseKey, new StringBuilder(key));
         }
     }
     else
     {
         StringBuilder sb = _MemCache.Get <StringBuilder>(baseKey);
         if (sb == null)
         {
             _MemCache.Set(baseKey, new StringBuilder(key));
         }
         else
         {
             sb.Append("," + key);
             _MemCache.Set(baseKey, sb);
         }
     }
 }
Example #4
0
        /// <summary>
        /// 获取列所在的索引位置(若不存在返回-1)
        /// </summary>
        public int GetIndex(string columnName)
        {
            if (columnIndex.Count == 0 || IsColumnNameChanged || columnIndex.Count != Count)
            {
                columnIndex.Clear();
                for (int i = 0; i < Count; i++)
                {
                    columnIndex.Add(this[i].ColumnName.Replace("_", ""), i);
                }
                IsColumnNameChanged = false;
            }

            if (!string.IsNullOrEmpty(columnName))
            {
                if (columnName.IndexOf('_') > -1)
                {
                    columnName = columnName.Replace("_", "");//兼容映射处理
                }
                if (columnIndex.ContainsKey(columnName))
                {
                    return(columnIndex[columnName]);
                }
                //for (int i = 0; i < Count; i++)
                //{
                //    if (string.Compare(this[i].ColumnName.Replace("_", ""), columnName, StringComparison.OrdinalIgnoreCase) == 0)//第三个参数用StringComparison.OrdinalIgnoreCase比用true快。
                //    {
                //        return i;
                //    }
                //}
            }
            return(-1);
        }
Example #5
0
 public void Set(string objName, string tableName)
 {
     if (string.IsNullOrEmpty(objName))
     {
         return;
     }
     if (midTableNameList.ContainsKey(MenuID))
     {
         string value = midTableNameList[MenuID];
         if (value.IndexOf(objName) == -1)
         {
             value += "," + objName;
         }
         if (!string.IsNullOrEmpty(tableName) && value.IndexOf(tableName) == -1)
         {
             value += "," + tableName;
         }
         midTableNameList[MenuID] = value;
     }
     else
     {
         string value = objName;
         if (!string.IsNullOrEmpty(tableName) && tableName != objName)
         {
             value += "," + tableName;
         }
         midTableNameList.Add(MenuID, value);
     }
 }
        public void testMDictionariesEqual_SameOrder()
        {
            // Data setup
            MDictionary <string, string> actual = new MDictionary <string, string>();

            actual.Add("1", "start");
            actual.Add("2", "start");

            // Expectations
            MDictionary <string, string> expected = new MDictionary <string, string>();

            expected.Add("1", "start");
            expected.Add("2", "start");

            // Test and Assert
            Assert.AreEqual(actual, expected);
        }
        public void testMDictionariesNotEqual_differentValues()
        {
            // Data setup
            MDictionary <string, string> actual = new MDictionary <string, string>();

            actual.Add("1", "start");
            actual.Add("2", "node1");

            // Expectations
            MDictionary <string, string> expected = new MDictionary <string, string>();

            expected.Add("1", "node1");
            expected.Add("2", "node2");

            // Test and Assert
            Assert.IsFalse(actual.Equals(expected));
        }
Example #8
0
 /// <summary>
 /// 设置Web.config或App.config的值。
 /// </summary>
 public static void SetApp(string key, string value)
 {
     try
     {
         if (appConfigs.ContainsKey(key))
         {
             appConfigs[key] = value;
         }
         else
         {
             appConfigs.Add(key, value);
         }
     }
     catch (Exception err)
     {
         CYQ.Data.Log.WriteLogToTxt(err);
     }
 }
Example #9
0
        /// <summary>
        /// 获取Shared文件View
        /// </summary>
        /// <param name="htmlName"></param>
        /// <returns></returns>
        private static XHtmlAction GetSharedView(string htmlName, string htmlPath)
        {
            string path = AppConfig.WebRootPath + AppConfig.GetApp("Views", "Views") + "/Shared/" + htmlName + ".html";

            if (!File.Exists(path))
            {
                path = null;
                string[] files = Directory.GetFiles(Path.GetDirectoryName(htmlPath), htmlName + ".html", SearchOption.AllDirectories);
                if (files != null && files.Length > 0)
                {
                    path = files[0];
                }
                else
                {
                    files = Directory.GetFiles(AppConfig.WebRootPath + AppConfig.GetApp("Views", "Views"), htmlName + ".html", SearchOption.AllDirectories);
                    if (files != null && files.Length > 0)
                    {
                        path = files[0];
                    }
                }
                if (path == null)
                {
                    return(null);
                }
            }
            XHtmlAction sharedView = null;
            string      key        = EncryptHelper.GetHashKey(path);

            if (sharedViews.ContainsKey(key))
            {
                sharedView = sharedViews[key];
                if (sharedView.IsXHtmlChanged)
                {
                    sharedViews.Remove(key);
                    sharedView = null;
                }
                else
                {
                    return(sharedView);
                }
            }

            sharedView = new XHtmlAction(true, true);
            if (sharedView.Load(path, XmlCacheLevel.Day, true))
            {
                lock (lockObj)
                {
                    if (!sharedView.Contains(key))
                    {
                        sharedViews.Add(key, sharedView);
                    }
                }
                return(sharedView);
            }

            return(null);
        }
Example #10
0
        public void Append(string key, string value, CookieOptions options)
        {
            context.Response.Cookies.Append(key, value, options);
            HttpCookie cookie = options;

            cookie.Name  = key;
            cookie.Value = value;
            dic.Add(cookie.Name, cookie);
        }
Example #11
0
 private void AddHost(MList <string> hosts)
 {
     foreach (string host in hosts.List)
     {
         HostNode instance = new HostNode(this, host);
         instance.OnAfterSocketCreateEvent += new HostNode.OnAfterSocketCreateDelegate(instance_OnAfterSocketCreateEvent);
         hostList.Add(host, instance);
     }
 }
Example #12
0
        public static bool BeginTransation(string conn, IsolationLevel level)
        {
            string key = StaticTool.GetTransationKey(conn);

            if (!TransationKeys.ContainsKey(key))
            {
                TransationKeys.Add(key, level);
                return(true);
            }
            return(false);
        }
        public override int Add(object value)
        {
            NoSqlParameter p = value as NoSqlParameter;

            if (p != null && !dic.ContainsKey(p.ParameterName))
            {
                dic.Add(p.ParameterName, p);
                return(1);
            }
            return(0);
        }
Example #14
0
        /// <summary>
        /// 获取Web.config或App.config的connectionStrings节点的值。
        /// </summary>
        public static string GetConn(string name, out string providerName)
        {
            providerName = string.Empty;
            if (string.IsNullOrEmpty(name))
            {
                name = "Conn";
            }
            if (name.Trim().Contains(" "))
            {
                return(name);
            }
            if (connConfigs.ContainsKey(name))
            {
                return(connConfigs[name]);
            }
            ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings[name];

            if (conn != null)
            {
                providerName = conn.ProviderName;
                if (name == conn.ConnectionString)//避免误写自己造成死循环。
                {
                    return(name);
                }
                name = conn.ConnectionString;
                if (!string.IsNullOrEmpty(name) && name.Length < 32 && name.Split(' ').Length == 1)
                {
                    return(GetConn(name));
                }
                if (!connConfigs.ContainsKey(name) && string.IsNullOrEmpty(providerName)) // 如果有providerName,则不存档
                {
                    connConfigs.Add(name, conn.ConnectionString);
                }
                return(conn.ConnectionString);
            }
            if (name.Length > 32 && name.Split('=').Length > 3 && name.Contains(";")) //链接字符串很长,没空格的情况
            {
                return(name);
            }
            return("");
        }
Example #15
0
        /// <summary>
        /// 设置Web.config或App.config的值 value为null时移除缓存。
        /// </summary>
        public static bool SetApp(string key, string value)
        {
            if (string.IsNullOrEmpty(key))
            {
                return(false);
            }
            if (value == null)
            {
                return(appConfigs.Remove(key));
            }
            if (appConfigs.ContainsKey(key))
            {
                appConfigs[key] = value;
            }
            else
            {
                appConfigs.Add(key, value);
            }

            return(true);
        }
Example #16
0
        /// <summary>
        /// 获取列所在的索引位置(若不存在返回-1)
        /// </summary>
        public int GetIndex(string columnName)
        {
            columnName = columnName.Trim();
            if (columnIndex.Count == 0 || IsColumnNameChanged || columnIndex.Count != Count)
            {
                columnIndex.Clear();
                for (int i = 0; i < Count; i++)
                {
                    columnIndex.Add(this[i].ColumnName.Replace("_", ""), i);
                }
                IsColumnNameChanged = false;
            }

            if (!string.IsNullOrEmpty(columnName))
            {
                if (columnName.IndexOf('_') > -1)
                {
                    columnName = columnName.Replace("_", "");//兼容映射处理
                }
                if (columnIndex.ContainsKey(columnName))
                {
                    return(columnIndex[columnName]);
                }
                else
                {
                    //开启默认前缀检测
                    string[] items = AppConfig.UI.AutoPrefixs.Split(',');
                    if (items != null && items.Length > 0)
                    {
                        foreach (string item in items)
                        {
                            columnName = columnName.StartsWith(item) ? columnName.Substring(3) : item + columnName;
                            if (columnIndex.ContainsKey(columnName))
                            {
                                return(columnIndex[columnName]);
                            }
                        }
                    }
                }
                //for (int i = 0; i < Count; i++)
                //{
                //    if (string.Compare(this[i].ColumnName.Replace("_", ""), columnName, StringComparison.OrdinalIgnoreCase) == 0)//第三个参数用StringComparison.OrdinalIgnoreCase比用true快。
                //    {
                //        return i;
                //    }
                //}
            }
            return(-1);
        }
Example #17
0
        /// <summary>
        /// 相对底层Cache添加方法,添加一个Cache请用Add方法
        /// </summary>
        /// <param name="key">标识</param>
        /// <param name="value">对象值</param>
        /// <param name="fileName">依赖文件</param>
        /// <param name="cacheMinutes">缓存分钟数</param>
        /// <param name="level" >缓存级别</param>
        private void Insert(string key, object value, string fileName, double cacheMinutes, CacheItemPriority level)
        {
            CacheDependency theCacheDependency = null;

            if (!string.IsNullOrEmpty(fileName))
            {
                theCacheDependency = new CacheDependency(fileName);
            }
            double cacheTime = cacheMinutes;

            if (cacheMinutes <= 0)
            {
                cacheTime = AppConfig.Cache.DefaultCacheTime;
            }
            DateTime cTime = DateTime.Now.AddMinutes(cacheTime);

            theCache.Insert(key, value == null ? string.Empty : value, theCacheDependency, cTime, TimeSpan.Zero, level, null);
            CacheDependencyInfo info = new CacheDependencyInfo(theCacheDependency, cacheTime);

            lock (lockObj)
            {
                try
                {
                    if (theState.ContainsKey(key))
                    {
                        theState[key] = info;
                    }
                    else
                    {
                        theState.Add(key, info);
                    }
                    TimeSpan ts        = cTime - startTime;
                    int      workCount = (int)ts.TotalMinutes / taskInterval;//计算出离开始有多少个间隔时间。
                    if (keyTime.ContainsKey(workCount))
                    {
                        keyTime[workCount].Append("," + key);
                    }
                    else
                    {
                        keyTime.Add(workCount, new StringBuilder(key));
                    }
                }
                catch
                {
                }
            }
            getCacheTableTime = DateTime.Now.AddMinutes(-5);//设置缓存表过期。
        }
Example #18
0
 public void Add(HttpCookie cookie)
 {
     if (context != null && cookie != null)
     {
         context.Response.Cookies.Append(cookie.Name, cookie.Value);//找不到其它Cookie的操作,暂时先这样。
         dic.Add(cookie.Name, cookie);
         //Microsoft.AspNetCore.Authentication.Cookies.
         //Microsoft.AspNetCore.Http.CookieBuilder cb = new Microsoft.AspNetCore.Http.CookieBuilder();
         //cb.Domain = cookie.Domain;
         //cb.Name = cookie.Name;
         //cb.Expiration = cookie.Expires-DateTime.Now;
         //cb.HttpOnly = cookie.HttpOnly;
         ////cb.
         //cb.Build(context);
     }
 }
Example #19
0
        internal static ConnObject GetConnObject(string dbConn)
        {
            dbConn = string.IsNullOrEmpty(dbConn) ? AppConfig.DB.DefaultConn : dbConn;
            if (connDicCache.ContainsKey(dbConn))
            {
                return(connDicCache[dbConn]);
            }
            ConnBean cbMaster = GetConnBean(dbConn);

            if (cbMaster == null)
            {
                if (dbConn == AppConfig.DB.DefaultConn)
                {
                    Error.Throw(string.Format("Can't find the connection key '{0}' from web.config or app.config!", dbConn));
                }
                else
                {
                    ConnBean cb = GetConnBean(AppConfig.DB.DefaultConn);
                    cbMaster = cb.Clone();//获取默认的值。
                }
            }
            ConnObject co = new ConnObject();

            co.Master = cbMaster;
            if (dbConn != null && dbConn.Length < 32 && !dbConn.Trim().Contains(" ")) // 为configKey
            {
                ConnBean coBak = GetConnBean(dbConn + "_Bak");
                if (coBak != null && coBak.ProviderName == cbMaster.ProviderName)
                {
                    co.BackUp = coBak;
                }
                for (int i = 1; i < 1000; i++)
                {
                    ConnBean cbSlave = GetConnBean(dbConn + "_Slave" + i);
                    if (cbSlave == null)
                    {
                        break;
                    }
                    co.Slave.Add(cbSlave);
                }
            }
            if (!connDicCache.ContainsKey(dbConn))
            {
                connDicCache.Add(dbConn, co);
            }
            return(co);
        }
Example #20
0
 private bool IsExistsDbNameWithCache(string dbName)
 {
     try
     {
         string key = dalType.ToString() + "." + dbName;
         if (dbList.ContainsKey(key))
         {
             return dbList[key];
         }
         bool result = IsExistsDbName(dbName);
         dbList.Add(key, result);
         return result;
     }
     catch
     {
         return true;
     }
 }
Example #21
0
 private bool IsExistsDbNameWithCache(string dbName)
 {
     try
     {
         string key = DataBaseType.ToString() + "." + dbName;
         if (dbList.ContainsKey(key))
         {
             return(dbList[key]);
         }
         bool result = IsExistsDbName(dbName);
         dbList.Add(key, result);
         return(result);
     }
     catch
     {
         return(true);
     }
 }
Example #22
0
        private GraphNode createNode(CharacterTypeEnum character, string sentence, AnnotationEnum annotation, string linkedNodeID)
        {
            GraphNode node = new GraphNode();

            List <string> conversations = new List <string>();

            conversations.Add(sentence);

            List <string> linkedIds = new List <string>();

            linkedIds.Add(linkedNodeID);
            MDictionary <string, List <string> > nodeLinks = new MDictionary <string, List <string> >();

            nodeLinks.Add(annotation.ToString(), linkedIds);

            node = createNode(character, conversations, nodeLinks);

            return(node);
        }
        /// <summary>
        /// 开启加载一个配置。
        /// </summary>
        /// <param name="connName">Conn的名称</param>
        /// <param name="connPath">Conn指向的路径</param>
        /// <returns></returns>
        public static string Start(string connName, string connPath)
        {
            lock (o)
            {
                string path = AppConfig.RunPath + connPath;
                string json = JsonHelper.ReadJson(path);
                if (string.IsNullOrEmpty(json))
                {
                    return(connName);
                }
                WatchConfig config = JsonHelper.ToEntity <WatchConfig>(JsonHelper.GetValue(json, connName));
                if (config != null && !string.IsNullOrEmpty(config.Master))
                {
                    AppConfig.SetConn(connName, config.Master);
                    if (!string.IsNullOrEmpty(config.Backup))
                    {
                        AppConfig.SetConn(connName + "_Bak", config.Backup);
                    }
                    if (config.Slave != null && config.Slave.Length > 0)
                    {
                        for (int i = 0; i < config.Slave.Length; i++)
                        {
                            AppConfig.SetConn(connName + "_Slave" + (i + 1), config.Slave[i]);
                        }
                    }
                    if (!watchList.ContainsValue(connPath))
                    {
                        IOWatch.On(path, delegate(FileSystemEventArgs e)
                        {
                            fsy_Changed(e);
                        });
                    }
                    if (!watchList.ContainsKey(connName))
                    {
                        watchList.Add(connName, connPath);
                    }

                    return(config.Master);
                }
            }
            return(connName);
        }
Example #24
0
        public static void Add(SysLogs log)
        {
            long hash = log.Message.GetHashCode() + log.LogType.GetHashCode();

            if (hashObj.ContainsKey(hash))
            {
                if (hashObj[hash].AddMinutes(3) < DateTime.Now)
                {
                    hashObj.Remove(hash); //超过1分钟的,不再存档。
                }
                log = null;               //直接丢掉。
                return;
            }
            hashObj.Add(hash, DateTime.Now);
            _LogQueue.Enqueue(log);
            if (!threadIsWorking)
            {
                threadIsWorking = true;
                ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), null);
            }
        }
Example #25
0
        /// <summary>
        /// 简单工厂(Factory Method)
        /// </summary>
        public static DalBase CreateDal(string connNameOrString)
        {
            string key = StaticTool.GetTransationKey(connNameOrString);
            //检测是否开启了全局事务;
            bool isTrans = DBFast.HasTransation(key);

            if (isTrans)
            {
                if (dalBaseDic.ContainsKey(key))
                {
                    return(dalBaseDic[key]);
                }
            }
            DalBase dal = CreateDalBase(connNameOrString);

            if (isTrans)
            {
                dal.TranLevel   = DBFast.GetTransationLevel(key);
                dal.IsOpenTrans = true;
                dalBaseDic.Add(key, dal);
            }
            return(dal);
        }
Example #26
0
        public static MDataColumn GetColumns(Type typeInfo)
        {
            string key = "ColumnCache:" + typeInfo.FullName;

            if (columnCache.ContainsKey(key))
            {
                return(columnCache[key].Clone());
            }
            else
            {
                #region 获取列结构
                MDataColumn mdc = new MDataColumn();
                switch (StaticTool.GetSystemType(ref typeInfo))
                {
                case SysType.Base:
                case SysType.Enum:
                    mdc.Add(typeInfo.Name, DataType.GetSqlType(typeInfo), false);
                    return(mdc);

                case SysType.Generic:
                case SysType.Collection:
                    Type[] argTypes;
                    Tool.StaticTool.GetArgumentLength(ref typeInfo, out argTypes);
                    foreach (Type type in argTypes)
                    {
                        mdc.Add(type.Name, DataType.GetSqlType(type), false);
                    }
                    argTypes = null;
                    return(mdc);
                }

                PropertyInfo[] pis = StaticTool.GetPropertyInfo(typeInfo);

                SqlDbType sqlType;
                for (int i = 0; i < pis.Length; i++)
                {
                    sqlType = SQL.DataType.GetSqlType(pis[i].PropertyType);
                    mdc.Add(pis[i].Name, sqlType);
                    MCellStruct column = mdc[i];
                    column.MaxSize = DataType.GetMaxSize(sqlType);
                    if (i == 0)
                    {
                        column.IsPrimaryKey = true;
                        column.IsCanNull    = false;

                        if (column.ColumnName.ToLower().Contains("id") && (column.SqlType == System.Data.SqlDbType.Int || column.SqlType == SqlDbType.BigInt))
                        {
                            column.IsAutoIncrement = true;
                        }
                    }
                    else if (i > pis.Length - 3 && sqlType == SqlDbType.DateTime && pis[i].Name.EndsWith("Time"))
                    {
                        column.DefaultValue = SqlValue.GetDate;
                    }
                }
                pis = null;
                #endregion

                if (!columnCache.ContainsKey(key))
                {
                    columnCache.Add(typeInfo.FullName, mdc.Clone());
                }

                return(mdc);
            }
        }
Example #27
0
        public static MDataColumn GetColumns(string tableName, string conn)
        {
            string key = GetSchemaKey(tableName, conn);

            #region 缓存检测
            if (_ColumnCache.ContainsKey(key))
            {
                return(_ColumnCache[key].Clone());
            }
            if (!string.IsNullOrEmpty(AppConfig.DB.SchemaMapPath))
            {
                string fullPath = AppConfig.RunPath + AppConfig.DB.SchemaMapPath + key + ".ts";
                if (System.IO.File.Exists(fullPath))
                {
                    MDataColumn columns = MDataColumn.CreateFrom(fullPath);
                    if (columns.Count > 0)
                    {
                        CacheManage.LocalInstance.Set(key, columns.Clone(), 1440);
                        return(columns);
                    }
                }
            }
            #endregion
            string fixName;
            conn      = CrossDB.GetConn(tableName, out fixName, conn ?? AppConfig.DB.DefaultConn);
            tableName = fixName;
            if (conn == null)
            {
                return(null);
            }
            MDataColumn mdcs = null;
            using (DalBase dbHelper = DalCreate.CreateDal(conn))
            {
                DataBaseType dalType = dbHelper.DataBaseType;


                if (dalType == DataBaseType.Txt || dalType == DataBaseType.Xml)
                {
                    #region 文本数据库处理。
                    if (!tableName.Contains(" "))                                // || tableName.IndexOfAny(Path.GetInvalidPathChars()) == -1
                    {
                        tableName = SqlFormat.NotKeyword(tableName);             //处理database..tableName;
                        tableName = Path.GetFileNameWithoutExtension(tableName); //视图表,带“.“的,会出问题
                        string fileName = dbHelper.Con.DataSource + tableName + (dalType == DataBaseType.Txt ? ".txt" : ".xml");
                        mdcs = MDataColumn.CreateFrom(fileName);
                        mdcs.DataBaseType = dalType;
                        mdcs.Conn         = conn;
                    }

                    #endregion
                }
                else
                {
                    #region 其它数据库
                    mdcs              = new MDataColumn();
                    mdcs.Conn         = conn;
                    mdcs.TableName    = tableName;
                    mdcs.DataBaseType = dalType;

                    tableName = SqlFormat.Keyword(tableName, dbHelper.DataBaseType);//加上关键字:引号
                    //如果table和helper不在同一个库
                    DalBase helper = dbHelper.ResetDalBase(tableName);

                    helper.IsRecordDebugInfo = false || AppDebug.IsContainSysSql;//内部系统,不记录SQL表结构语句。
                    try
                    {
                        bool isView = tableName.Contains(" ");//是否视图。
                        if (!isView)
                        {
                            isView = CrossDB.Exists(tableName, "V", conn);
                        }
                        if (!isView)
                        {
                            TableInfo info = CrossDB.GetTableInfoByName(mdcs.TableName, conn);
                            if (info != null)
                            {
                                mdcs.Description = info.Description;
                            }
                        }
                        MCellStruct mStruct = null;
                        SqlDbType   sqlType = SqlDbType.NVarChar;
                        if (isView)
                        {
                            string sqlText = SqlFormat.BuildSqlWithWhereOneEqualsTow(tableName);// string.Format("select * from {0} where 1=2", tableName);
                            mdcs = GetViewColumns(sqlText, ref helper);
                        }
                        else
                        {
                            mdcs.AddRelateionTableName(SqlFormat.NotKeyword(tableName));
                            switch (dalType)
                            {
                            case DataBaseType.MsSql:
                            case DataBaseType.Oracle:
                            case DataBaseType.MySql:
                            case DataBaseType.Sybase:
                            case DataBaseType.PostgreSQL:
                                #region Sql
                                string sql = string.Empty;
                                if (dalType == DataBaseType.MsSql)
                                {
                                    #region Mssql
                                    string dbName = null;
                                    if (!helper.Version.StartsWith("08"))
                                    {
                                        //先获取同义词,检测是否跨库
                                        string realTableName = Convert.ToString(helper.ExeScalar(string.Format(MSSQL_SynonymsName, SqlFormat.NotKeyword(tableName)), false));
                                        if (!string.IsNullOrEmpty(realTableName))
                                        {
                                            string[] items = realTableName.Split('.');
                                            tableName = realTableName;
                                            if (items.Length > 0)    //跨库了
                                            {
                                                dbName = realTableName.Split('.')[0];
                                            }
                                        }
                                    }

                                    sql = GetMSSQLColumns(helper.Version.StartsWith("08"), dbName ?? helper.DataBaseName);
                                    #endregion
                                }
                                else if (dalType == DataBaseType.MySql)
                                {
                                    sql = GetMySqlColumns(helper.DataBaseName);
                                }
                                else if (dalType == DataBaseType.Oracle)
                                {
                                    tableName = tableName.ToUpper();    //Oracle转大写。
                                    //先获取同义词,不检测是否跨库
                                    string realTableName = Convert.ToString(helper.ExeScalar(string.Format(Oracle_SynonymsName, SqlFormat.NotKeyword(tableName)), false));
                                    if (!string.IsNullOrEmpty(realTableName))
                                    {
                                        tableName = realTableName;
                                    }

                                    sql = GetOracleColumns();
                                }
                                else if (dalType == DataBaseType.Sybase)
                                {
                                    tableName = SqlFormat.NotKeyword(tableName);
                                    sql       = GetSybaseColumns();
                                }
                                else if (dalType == DataBaseType.PostgreSQL)
                                {
                                    sql = GetPostgreColumns();
                                }
                                helper.AddParameters("TableName", SqlFormat.NotKeyword(tableName), DbType.String, 150, ParameterDirection.Input);
                                DbDataReader sdr = helper.ExeDataReader(sql, false);
                                if (sdr != null)
                                {
                                    long   maxLength;
                                    bool   isAutoIncrement = false;
                                    short  scale           = 0;
                                    string sqlTypeName     = string.Empty;
                                    while (sdr.Read())
                                    {
                                        short.TryParse(Convert.ToString(sdr["Scale"]), out scale);
                                        if (!long.TryParse(Convert.ToString(sdr["MaxSize"]), out maxLength))    //mysql的长度可能大于int.MaxValue
                                        {
                                            maxLength = -1;
                                        }
                                        else if (maxLength > int.MaxValue)
                                        {
                                            maxLength = int.MaxValue;
                                        }
                                        sqlTypeName             = Convert.ToString(sdr["SqlType"]);
                                        sqlType                 = DataType.GetSqlType(sqlTypeName);
                                        isAutoIncrement         = Convert.ToBoolean(sdr["IsAutoIncrement"]);
                                        mStruct                 = new MCellStruct(mdcs.DataBaseType);
                                        mStruct.ColumnName      = Convert.ToString(sdr["ColumnName"]).Trim();
                                        mStruct.OldName         = mStruct.ColumnName;
                                        mStruct.SqlType         = sqlType;
                                        mStruct.IsAutoIncrement = isAutoIncrement;
                                        mStruct.IsCanNull       = Convert.ToBoolean(sdr["IsNullable"]);
                                        mStruct.MaxSize         = (int)maxLength;
                                        mStruct.Scale           = scale;
                                        mStruct.Description     = Convert.ToString(sdr["Description"]);
                                        mStruct.DefaultValue    = SqlFormat.FormatDefaultValue(dalType, sdr["DefaultValue"], 0, sqlType);
                                        mStruct.IsPrimaryKey    = Convert.ToString(sdr["IsPrimaryKey"]) == "1";
                                        switch (dalType)
                                        {
                                        case DataBaseType.MsSql:
                                        case DataBaseType.MySql:
                                        case DataBaseType.Oracle:
                                            mStruct.IsUniqueKey  = Convert.ToString(sdr["IsUniqueKey"]) == "1";
                                            mStruct.IsForeignKey = Convert.ToString(sdr["IsForeignKey"]) == "1";
                                            mStruct.FKTableName  = Convert.ToString(sdr["FKTableName"]);
                                            break;
                                        }

                                        mStruct.SqlTypeName = sqlTypeName;
                                        mStruct.TableName   = SqlFormat.NotKeyword(tableName);
                                        mdcs.Add(mStruct);
                                    }
                                    sdr.Close();
                                    if (dalType == DataBaseType.Oracle && mdcs.Count > 0)    //默认没有自增概念,只能根据情况判断。
                                    {
                                        MCellStruct firstColumn = mdcs[0];
                                        if (firstColumn.IsPrimaryKey && firstColumn.ColumnName.ToLower().Contains("id") && firstColumn.Scale == 0 && DataType.GetGroup(firstColumn.SqlType) == 1 && mdcs.JointPrimary.Count == 1)
                                        {
                                            firstColumn.IsAutoIncrement = true;
                                        }
                                    }
                                }
                                #endregion
                                break;

                            case DataBaseType.SQLite:
                                #region SQlite
                                if (helper.Con.State != ConnectionState.Open)
                                {
                                    helper.Con.Open();
                                }
                                DataTable sqliteDt = helper.Con.GetSchema("Columns", new string[] { null, null, SqlFormat.NotKeyword(tableName) });
                                if (!helper.IsOpenTrans)
                                {
                                    helper.Con.Close();
                                }
                                int    size;
                                short  sizeScale;
                                string dataTypeName = string.Empty;

                                foreach (DataRow row in sqliteDt.Rows)
                                {
                                    object len = row["NUMERIC_PRECISION"];
                                    if (len == null || len == DBNull.Value)
                                    {
                                        len = row["CHARACTER_MAXIMUM_LENGTH"];
                                    }
                                    short.TryParse(Convert.ToString(row["NUMERIC_SCALE"]), out sizeScale);
                                    if (!int.TryParse(Convert.ToString(len), out size))    //mysql的长度可能大于int.MaxValue
                                    {
                                        size = -1;
                                    }
                                    dataTypeName = Convert.ToString(row["DATA_TYPE"]);
                                    if (dataTypeName == "text" && size > 0)
                                    {
                                        sqlType = DataType.GetSqlType("varchar");
                                    }
                                    else
                                    {
                                        sqlType = DataType.GetSqlType(dataTypeName);
                                    }
                                    //COLUMN_NAME,DATA_TYPE,PRIMARY_KEY,IS_NULLABLE,CHARACTER_MAXIMUM_LENGTH AUTOINCREMENT

                                    mStruct              = new MCellStruct(row["COLUMN_NAME"].ToString(), sqlType, Convert.ToBoolean(row["AUTOINCREMENT"]), Convert.ToBoolean(row["IS_NULLABLE"]), size);
                                    mStruct.Scale        = sizeScale;
                                    mStruct.Description  = Convert.ToString(row["DESCRIPTION"]);
                                    mStruct.DefaultValue = SqlFormat.FormatDefaultValue(dalType, row["COLUMN_DEFAULT"], 0, sqlType);    //"COLUMN_DEFAULT"
                                    mStruct.IsPrimaryKey = Convert.ToBoolean(row["PRIMARY_KEY"]);
                                    mStruct.SqlTypeName  = dataTypeName;
                                    mStruct.TableName    = SqlFormat.NotKeyword(tableName);
                                    mdcs.Add(mStruct);
                                }
                                #endregion
                                break;

                            case DataBaseType.Access:
                                #region Access
                                DataTable       keyDt, valueDt;
                                string          sqlText = SqlFormat.BuildSqlWithWhereOneEqualsTow(tableName);// string.Format("select * from {0} where 1=2", tableName);
                                OleDbConnection con     = new OleDbConnection(helper.Con.ConnectionString);
                                OleDbCommand    com     = new OleDbCommand(sqlText, con);
                                con.Open();
                                keyDt   = com.ExecuteReader(CommandBehavior.KeyInfo).GetSchemaTable();
                                valueDt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, SqlFormat.NotKeyword(tableName) });
                                con.Close();
                                con.Dispose();

                                if (keyDt != null && valueDt != null)
                                {
                                    string    columnName = string.Empty, sqlTypeName = string.Empty;
                                    bool      isKey = false, isCanNull = true, isAutoIncrement = false;
                                    int       maxSize      = -1;
                                    short     maxSizeScale = 0;
                                    SqlDbType sqlDbType;
                                    foreach (DataRow row in keyDt.Rows)
                                    {
                                        columnName      = row["ColumnName"].ToString();
                                        isKey           = Convert.ToBoolean(row["IsKey"]);       //IsKey
                                        isCanNull       = Convert.ToBoolean(row["AllowDBNull"]); //AllowDBNull
                                        isAutoIncrement = Convert.ToBoolean(row["IsAutoIncrement"]);
                                        sqlTypeName     = Convert.ToString(row["DataType"]);
                                        sqlDbType       = DataType.GetSqlType(sqlTypeName);
                                        short.TryParse(Convert.ToString(row["NumericScale"]), out maxSizeScale);
                                        if (Convert.ToInt32(row["NumericPrecision"]) > 0)    //NumericPrecision
                                        {
                                            maxSize = Convert.ToInt32(row["NumericPrecision"]);
                                        }
                                        else
                                        {
                                            long len = Convert.ToInt64(row["ColumnSize"]);
                                            if (len > int.MaxValue)
                                            {
                                                maxSize = int.MaxValue;
                                            }
                                            else
                                            {
                                                maxSize = (int)len;
                                            }
                                        }
                                        mStruct              = new MCellStruct(columnName, sqlDbType, isAutoIncrement, isCanNull, maxSize);
                                        mStruct.Scale        = maxSizeScale;
                                        mStruct.IsPrimaryKey = isKey;
                                        mStruct.SqlTypeName  = sqlTypeName;
                                        mStruct.TableName    = SqlFormat.NotKeyword(tableName);
                                        foreach (DataRow item in valueDt.Rows)
                                        {
                                            if (columnName == item[3].ToString())    //COLUMN_NAME
                                            {
                                                if (item[8].ToString() != "")
                                                {
                                                    mStruct.DefaultValue = SqlFormat.FormatDefaultValue(dalType, item[8], 0, sqlDbType);    //"COLUMN_DEFAULT"
                                                }
                                                break;
                                            }
                                        }
                                        mdcs.Add(mStruct);
                                    }
                                }

                                #endregion
                                break;
                            }
                        }
                    }
                    catch (Exception err)
                    {
                        Log.Write(err, LogType.DataBase);
                        //helper.DebugInfo.Append(err.Message);
                    }
                    #endregion
                }
            }
            if (mdcs.Count > 0)
            {
                //移除被标志的列:
                string[] fields = AppConfig.DB.HiddenFields.Split(',');
                foreach (string item in fields)
                {
                    string field = item.Trim();
                    if (!string.IsNullOrEmpty(field) & mdcs.Contains(field))
                    {
                        mdcs.Remove(field);
                    }
                }
            }
            #region 缓存设置

            if (!_ColumnCache.ContainsKey(key) && mdcs.Count > 0)
            {
                _ColumnCache.Add(key, mdcs.Clone());
                if (!string.IsNullOrEmpty(AppConfig.DB.SchemaMapPath))
                {
                    string folderPath = AppConfig.RunPath + AppConfig.DB.SchemaMapPath;

                    if (!System.IO.Directory.Exists(folderPath))
                    {
                        System.IO.Directory.CreateDirectory(folderPath);
                    }
                    mdcs.WriteSchema(folderPath + key + ".ts");
                }
            }
            #endregion
            return(mdcs);
        }
Example #28
0
            /// <summary>
            /// 清理服务主机。
            /// </summary>
            internal static void ClearServerTable()
            {
                while (true)
                {
                    try
                    {
                        lock (Const.tableLockObj)
                        {
                            if (Server._HostList != null && Server._HostList.Count > 0)
                            {
                                MDictionary <string, List <HostInfo> > keyValuePairs    = Server._HostList;//拿到引用
                                MDictionary <string, List <HostInfo> > newKeyValuePairs = new MDictionary <string, List <HostInfo> >(StringComparer.OrdinalIgnoreCase);
                                foreach (var item in keyValuePairs)
                                {
                                    List <HostInfo> newList = new List <HostInfo>();
                                    foreach (var info in item.Value)
                                    {
                                        if (info.RegTime < DateTime.Now.AddSeconds(-11) || info.Version < 0)
                                        {
                                            Server.IsChange = true;
                                        }
                                        else
                                        {
                                            newList.Add(info);
                                        }
                                    }
                                    if (newList.Count > 0)
                                    {
                                        newKeyValuePairs.Add(item.Key, newList);
                                    }
                                }

                                if (Server.IsChange)
                                {
                                    Server.IsChange = false;
                                    Server.Tick     = DateTime.Now.Ticks;
                                    if (newKeyValuePairs.Count > 0)
                                    {
                                        Server._HostListJson = JsonHelper.ToJson(newKeyValuePairs);
                                        IO.Write(Const.ServerHostListJsonPath, Server._HostListJson);
                                    }
                                    else
                                    {
                                        Server._HostListJson = String.Empty;
                                        IO.Delete(Const.ServerHostListJsonPath);
                                    }
                                    Server._HostList = newKeyValuePairs;
                                }
                                else
                                {
                                    newKeyValuePairs.Clear();
                                    newKeyValuePairs = null;
                                }
                            }
                        }
                    }
                    catch (Exception err)
                    {
                        LogWrite(err.Message, "MicroService.Run.ClearServerTable()", "", Config.ServerName);
                    }
                    Thread.Sleep(5000);//测试并发。
                }
            }
Example #29
0
    public static Message ParserJson(string json)
    {
        json = json.Trim();
        if (json.StartsWith("{") && json.EndsWith("}"))
        {
            // 对象或字典(先转化为字典,再通过Type转化为对象)
            MDictionary <MString, Message> obj = new MDictionary <MString, Message>();
            int    match = 0;
            int    last  = 0;
            int    index;
            string key, value, elm;
            json = json.Substring(1, json.Length - 2);
            for (int i = 0; i < json.Length; ++i)
            {
                if (json[i] == '{' || json[i] == '[')
                {
                    ++match;
                }
                else if (json[i] == '}' || json[i] == ']')
                {
                    --match;
                }
                else if (match == 0 && json[i] == ',')
                {
                    elm   = json.Substring(last, i - last);
                    index = elm.IndexOf(':');
                    if (-1 == index)
                    {
                        throw new Exception("数据格式错误");
                    }

                    key   = elm.Substring(0, index).Trim().Trim('\"');
                    value = elm.Substring(index + 1);
                    obj.Add(new MString(key), ParserJson(value));
                    last = i + 1;
                }
            }
            elm   = json.Substring(last);
            index = elm.IndexOf(':');
            key   = elm.Substring(0, index).Trim().Trim('\"');
            value = elm.Substring(index + 1);
            obj.Add(new MString(key), ParserJson(value));
            return(obj);
        }
        else if (json.StartsWith("[") && json.EndsWith("]"))
        {
            // 数组
            MList <Message> list  = new MList <Message>();
            int             match = 0;
            int             last  = 0;
            json = json.Substring(1, json.Length - 2);
            for (int i = 0; i < json.Length; ++i)
            {
                if (json[i] == '{' || json[i] == '[')
                {
                    ++match;
                }
                else if (json[i] == '}' || json[i] == ']')
                {
                    --match;
                }
                else if (match == 0 && json[i] == ',')
                {
                    list.Add(ParserJson(json.Substring(last, i - last)));
                    last = i + 1;
                }
            }
            list.Add(ParserJson(json.Substring(last)));
            return(list);
        }
        else if (json.StartsWith("\"") && json.EndsWith("\""))
        {
            // 字符串
            return(new MString(json.Trim('\"')));
        }
        else if (json.StartsWith("\'") && json.EndsWith("\'"))
        {
            // 字符
            return(new MChar(json[1]));
        }
        else if (-1 != json.IndexOf('.'))
        {
            // 浮点数
            double num;
            double.TryParse(json, out num);
            return(new MDouble(num));
        }
        else
        {
            // 整数
            long num;
            long.TryParse(json, out num);
            return(new MLong(num));
        }
    }
Example #30
0
        /// <param name="fileName">文件依赖路径</param>
        public override bool Set(string key, object value, double cacheMinutes, string fileName)
        {
            try
            {
                if (string.IsNullOrEmpty(key))
                {
                    return(false);
                }
                if (value == null)
                {
                    return(Remove(key));
                }
                lock (lockObj)
                {
                    if (theCache.ContainsKey(key))
                    {
                        theCache[key] = value;
                    }
                    else
                    {
                        theCache.Add(key, value);//2:设置value
                    }
                    double cacheTime = cacheMinutes;
                    if (cacheMinutes <= 0)
                    {
                        cacheTime = AppConfig.Cache.DefaultCacheTime;
                    }
                    DateTime cTime     = DateTime.Now.AddMinutes(cacheTime);
                    int      workCount = GetWorkCount(cTime);
                    if (theKeyTime.ContainsKey(key))
                    {
                        int wc = GetWorkCount(theKeyTime[key]);
                        if (wc != workCount && theTime.ContainsKey(wc))
                        {
                            if (theTime[wc].Contains(key))
                            {
                                theTime[wc].Remove(key); //移除旧值
                            }
                        }
                        theKeyTime[key] = cTime;
                    }
                    else
                    {
                        theKeyTime.Add(key, cTime);
                    }

                    if (theTime.ContainsKey(workCount))//3:设置time
                    {
                        if (!theTime[workCount].Contains(key))
                        {
                            theTime[workCount].Add(key);
                        }
                    }
                    else
                    {
                        MList <string> list = new MList <string>();
                        list.Add(key);
                        theTime.Add(workCount, list);
                    }

                    if (!string.IsNullOrEmpty(fileName))//3:设置file
                    {
                        if (fileName.IndexOf("\\\\") > -1)
                        {
                            fileName = fileName.Replace("\\\\", "\\");
                        }
                        if (!theFileName.ContainsKey(key))
                        {
                            theFileName.Add(key, fileName);
                        }
                        string folder = Path.GetDirectoryName(fileName);
                        if (!theFolderWatcher.ContainsKey(folder) && Directory.Exists(folder))
                        {
                            theFolderWatcher.Add(folder, CreateFileSystemWatcher(folder));
                        }

                        if (theFolderKeys.ContainsKey(folder))
                        {
                            if (!theFolderKeys[folder].Contains(key))
                            {
                                theFolderKeys[folder].Add(key);
                            }
                        }
                        else
                        {
                            MList <string> list = new MList <string>();
                            list.Add(key);
                            theFolderKeys.Add(folder, list);
                        }
                    }
                }
                return(true);
            }
            catch (Exception err)
            {
                Log.Write(err, LogType.Cache);
                errorCount++;
                return(false);
            }
        }