Пример #1
0
 public static string DbDelimiter(this DbConnType dbConnType, string TableOrFieldName, bool checkSymExists = false)
 {
     if (dbConnType == DbConnType.MSSQL)
     {
         if (checkSymExists)
         {
             return(TableOrFieldName.StartsWith("[") ? TableOrFieldName : $"[{TableOrFieldName}]");
         }
         else
         {
             return($"[{TableOrFieldName}]");
         }
     }
     else if (dbConnType.IsMySQL())
     {
         if (checkSymExists)
         {
             return(TableOrFieldName.StartsWith("`") ? TableOrFieldName : $"`{TableOrFieldName}`");
         }
         else
         {
             return($"`{TableOrFieldName}`");
         }
     }
     return(TableOrFieldName);
 }
Пример #2
0
 /// <summary>
 /// 取各种数据库获取当前时间的函数
 /// </summary>
 /// <param name="connType"></param>
 /// <returns></returns>
 public static string GetCurrentTimeFuncName(this DbConnType connType)
 {
     if (connType.IsOracle())
     {
         return("current_date");
     }
     else if (connType == DbConnType.MSSQL)
     {
         return("getdate()");
     }
     else if (connType.IsMySQL())
     {
         return("now()");
     }
     else if (connType == DbConnType.POSTGRESQL)
     {
         return("localtimestamp");
     }
     else if (connType == DbConnType.SQLITE)
     {
         return("datetime('now')");
     }
     else
     {
         return("date()");
     }
 }
Пример #3
0
 /// <summary>
 /// 取各种数据库ISNULL的函数
 /// </summary>
 /// <param name="connType"></param>
 /// <returns></returns>
 public static string GetIsNullFuncName(this DbConnType connType)
 {
     if (connType.IsOracle())
     {
         return("NVL");
     }
     else if (connType == DbConnType.MSSQL)
     {
         return("ISNULL");
     }
     else if (connType.IsMySQL())
     {
         return("IFNULL");
     }
     else if (connType == DbConnType.POSTGRESQL)
     {
         return("NULLIF");
     }
     else if (connType == DbConnType.SQLITE)
     {
         return("IFNULL");
     }
     else
     {
         return("ISNULL");
     }
 }
Пример #4
0
 public DateTime GetTime(DbConnType connType, string ConnectionString)
 {
     using (DbContext conn = new DbContext(ConnectionString, connType))
     {
         return(conn.Now());
     }
 }
Пример #5
0
        /// <summary>
        /// 获取更新的语句
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="Columns"></param>
        /// <param name="Keys"></param>
        /// <param name="connType"></param>
        /// <returns></returns>
        public static string GetUpdateSqlStr(this DbConnType connType, string tableName, string[] Columns, string[] Keys)
        {
            StringBuilder strbld = new StringBuilder(512);

            strbld.AppendFormat("Update {0} set ", connType.DbDelimiter(tableName));
            for (int i = 0, count = Columns.Length; i < count; i++)
            {
                string fieldName = Columns[i];
                if (Keys.Contains(fieldName))
                {
                    continue;
                }
                string parName = connType.TreatParaName(fieldName);
                strbld.AppendFormat("{0}={1},", connType.DbDelimiter(fieldName), parName);
            }
            strbld.Remove(strbld.Length - 1, 1);
            strbld.Append(" where ");
            for (int i = 0, count = Keys.Length; i < count; i++)
            {
                if (0 != i)
                {
                    strbld.Append(" and ");
                }
                string fieldName = Keys[i];
                string parName   = connType.TreatParaName(fieldName);
                strbld.AppendFormat("{0}={1}", connType.DbDelimiter(fieldName), parName);
            }
            return(strbld.ToString());
        }
Пример #6
0
 private static DbProviderFactory GetFactoryDirect(DbConnType dbConnType)
 {
     if (dbConnType == DbConnType.MSSQL)                                             //ok
     {
         return(System.Data.SqlClient.SqlClientFactory.Instance);                    //ok
     }
     else if (dbConnType == DbConnType.MYSQL)                                        //ok
     {
         return(GetFactory("MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data")); //ok
     }
     //return GetFactory("MySql.Data.MySqlClient.MySqlClientFactory,MySqlConnector");
     else if (dbConnType == DbConnType.ODPNET) //ok
     {
         return(GetFactory("Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess"));
     }
     else if (dbConnType == DbConnType.ORACLE) //ok
     {
         return(GetFactory("System.Data.OracleClient.OracleClientFactory,System.Data.OracleClient"));
     }
     else if (dbConnType == DbConnType.SQLITE) // ok
     {
         return(GetFactory("System.Data.SQLite.SQLiteFactory, System.Data.SQLite"));
     }
     else if (dbConnType == DbConnType.POSTGRESQL) //ok
     {
         return(GetFactory("Npgsql.NpgsqlFactory,Npgsql"));
     }
     else
     {
         throw new NotSupportedException(dbConnType.ToString());
     }
 }
Пример #7
0
 /// <summary>
 /// parName  ====>  @parName
 /// </summary>
 /// <param name="dbConnType"></param>
 /// <param name="paraNames"></param>
 /// <returns></returns>
 public static IEnumerable <string> TreatParaNames(this DbConnType dbConnType, params string[] paraNames)
 {
     foreach (string par in paraNames)
     {
         yield return(TreatParaName(dbConnType, par));
     }
 }
Пример #8
0
 private static object GetDataFieldValue(object obj, DbConnType connType)
 {
     if (SmartCrudHelper.IsNullOrDBNull(obj))
     {
         return(null); // DBNull.Value;  //dapper下不可使用 DBNull.Value
     }
     else
     {
         if (connType == DbConnType.ODPNET)
         {
             Type t = obj.GetType();
             if (t == GuidType)
             {
                 return(obj?.ToString().ToUpper());
             }
             else if (t == Bool)
             {
                 return((byte)(((bool)obj) ? 1 : 0));
             }
             else if (t == SmartCrudHelper.SByte)
             {
                 return(Convert.ToByte(obj));
             }
         }
         return(obj);
     }
 }
Пример #9
0
        /// <summary>
        /// QPVideoAnchorDB数据库操作
        /// </summary>
        /// <returns></returns>
        public static SqlSugarClient GetSqlSugarDB(DbConnType type)
        {
            var strConnectionString = "";

            switch (type)
            {
            case DbConnType.QPAgentAnchorDB:
                strConnectionString = ConfigurationManager.AppSettings["QPAgentAnchorDB"];
                break;

            case DbConnType.QPVideoAnchorDB:
                strConnectionString = ConfigurationManager.AppSettings["QPVideoAnchorDB"];
                break;

            case DbConnType.QPAnchorRecordDB:
                strConnectionString = ConfigurationManager.AppSettings["QPAnchorRecordDB"];
                break;

            case DbConnType.MovieDB:
                strConnectionString = ConfigurationManager.AppSettings["MovieRecordDb"];
                break;

            case DbConnType.AnchorPersonaliseDb:
                strConnectionString = ConfigurationManager.AppSettings["AnchorPersonaliseDb"];
                break;

            default:
                strConnectionString = ConfigurationManager.AppSettings["QPVideoAnchorDB"];
                break;
            }
            ICacheService cacheService = null;

            if (_RedisCache)
            {
                cacheService = new RedisCache(_RedisHost, _RedisPort);
            }
            else
            {
                cacheService = new HttpRuntimeCache();
            }

            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString          = strConnectionString,
                DbType                    = DbType.SqlServer,
                InitKeyType               = InitKeyType.Attribute,//InitKeyType 是读取主键和自增列信息的方式
                IsAutoCloseConnection     = true,
                ConfigureExternalServices = new ConfigureExternalServices()
                {
                    SqlFuncServices      = ExtMethods.GetExpMethods,
                    DataInfoCacheService = cacheService
                }
            });

            return(db);
        }
Пример #10
0
        /// <summary>
        /// 把字段串转换成各数据库连接类型对应的形式,such as  @Name,@Id,@Code
        /// </summary>
        /// <param name="Columns"></param>
        /// <param name="connType"></param>
        /// <returns></returns>
        public static string GetParaStringViaColumns(this DbConnType connType, string[] Columns)
        {
            StringBuilder strbld = new StringBuilder(512);

            for (int i = 0, count = Columns.Length; i < count; i++)
            {
                strbld.AppendFormat("{0},", connType.TreatParaName(Columns[i]));
            }
            return(strbld.ToString().TrimEnd(','));
        }
Пример #11
0
 /// <summary>
 /// parName  ====>  @parName
 /// </summary>
 /// <param name="dbConnType"></param>
 /// <param name="paraName"></param>
 /// <returns></returns>
 public static string TreatParaName(this DbConnType dbConnType, string paraName)
 {
     if (dbParPrefix.Contains(paraName[0])) //存在前缀
     {
         return($"{dbConnType.GetConnTypePrefixChar()}{paraName.TrimParaName()}");
     }
     else
     {
         return($"{dbConnType.GetConnTypePrefixChar()}{paraName}");
     }
 }
Пример #12
0
        public static DbProviderFactory GetFactory(DbConnType dbConnType)
        {
            DbProviderFactory result = null;
            string            str    = dbConnType.ToString();

            if (dic.TryGetValue(str, out result))
            {
                return(result);
            }
            result = GetFactoryDirect(dbConnType);
            dic.TryAdd(str, result);
            return(result);
        }
Пример #13
0
        /// <summary>
        /// 处理连接串,参数支持Diction<string,object>,DbParameter[] , new{},useBrackets=true则是使用这样的参数 #{Para1},否则就是使用 #Para1#
        /// </summary>
        /// <param name="dbConnType"></param>
        /// <param name="oriSql"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public static string TransSQL(this DbConnType dbConnType, string oriSql, object param, bool useBrackets = false)
        {
            string sql         = oriSql;
            int    countofChar = oriSql.Count(c => c == '#');

            if (2 <= countofChar)
            {
                sql = sql.Replace(CURRENT_TIME, GetCurrentTimeFuncName(dbConnType)).Replace(IS_NULL, GetIsNullFuncName(dbConnType));
                if (null != param)
                {
                    IEnumerable <DbParameter> dbpars = param as IEnumerable <DbParameter>;
                    if (null != dbpars)
                    {
                        foreach (var par in dbpars)
                        {
                            string naturePara     = par.ParameterName.TrimParaName();
                            string parNameInstead = "";
                            if (!useBrackets)
                            {
                                parNameInstead = string.Format("#{0}#", naturePara);
                            }
                            else
                            {
                                parNameInstead = "#{" + naturePara + "}";
                            }
                            sql = sql.Replace(parNameInstead, dbConnType.TreatParaName(naturePara));
                        }
                    }
                    else
                    {
                        IDictionary <string, object> dic = SmartCrudHelper.AsDictionary(param);
                        foreach (var par in dic)
                        {
                            string parNameInstead = "";
                            if (!useBrackets)
                            {
                                parNameInstead = string.Format("#{0}#", par.Key);
                            }
                            else
                            {
                                parNameInstead = "#{" + par.Key + "}";
                            }
                            sql = sql.Replace(parNameInstead, dbConnType.TreatParaName(par.Key));
                        }
                    }
                }
            }
            return(sql);
        }
Пример #14
0
 /// <summary>
 /// 获取连字符号
 /// </summary>
 /// <param name="connType"></param>
 /// <returns></returns>
 public static string GetStringConcat(this DbConnType connType, string fieldOrVar1, string fieldOrVar2)
 {
     if (connType.IsOracle() || connType == DbConnType.POSTGRESQL || connType == DbConnType.SQLITE)
     {
         return(string.Format("{0} || {1}", fieldOrVar1, fieldOrVar2));
     }
     else if (connType.IsMySQL())
     {
         return(string.Format("CONCAT({0},{1})", fieldOrVar1, fieldOrVar2));
     }
     else
     {
         return(string.Format("{0} + {1}", fieldOrVar1, fieldOrVar2));
     }
 }
Пример #15
0
 /// <summary>
 /// 获取数据库参数的前缀
 /// </summary>
 /// <param name="connType"></param>
 /// <returns></returns>
 private static string GetConnTypePrefixChar(this DbConnType connType)
 {
     if (connType.IsOracle() || connType == DbConnType.POSTGRESQL)
     {
         return(":");
     }
     else if (connType.IsMySQL())
     {
         return("@");
     }
     else
     {
         return("@");
     }
 }
Пример #16
0
 public DbContext(string connectString, DbConnType dbConnType)
 {
     SqlBuilder.LoadTypeHandler();
     this.DbType = dbConnType;
     if (this.DbType == DbConnType.MSSQL)
     {
         if (connectString.IndexOf("MultipleActiveResultSets", StringComparison.OrdinalIgnoreCase) < 0)
         {
             connectString += ";MultipleActiveResultSets=true;";
         }
     }
     dbProvider = DatabaseProvider.GetFactory(dbConnType);
     this.Db    = dbProvider.CreateConnection();
     this.Db.ConnectionString = connectString;
     this.Db.Open();
 }
Пример #17
0
 public static string DbDelimiter(this string TableOrFieldName, DbConnType dbConnType, bool checkSymExists = false)
 => dbConnType.DbDelimiter(TableOrFieldName, checkSymExists);
Пример #18
0
 public static bool IsMySQL(this DbConnType dbConnType) => dbConnType == DbConnType.MYSQL;
Пример #19
0
        /// <summary>
        /// 返回时间加减的表达式1:DAY 2:HOUR 3:MINUTE 4:SECOND
        /// </summary>
        /// <param name="connType"></param>
        /// <param name="dateType"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        public static string GetDateAddString(this DbConnType connType, DATEPART dateType, int Value)
        {
            if (dateType == DATEPART.MS)
            {
                throw new NotSupportedException("DATEPART.MS");
            }
            string sym = "+";

            if (0 > Value)//减
            {
                Value *= -1;
                sym    = "-";
            }
            string result = "";

            switch (dateType)
            {
            case  DATEPART.DAY:     //天数
                if (connType.IsMySQL())
                {
                    result = $"{sym} INTERVAL {Value} DAY";
                }
                else if (connType == DbConnType.POSTGRESQL)
                {
                    result = $"{sym} interval '{Value} days'";
                }
                else
                {
                    result = $"{sym}{Value}";
                }
                break;

            case DATEPART.HOUR:     //小时
                if (connType.IsMySQL())
                {
                    result = $"{sym} INTERVAL {Value} HOUR";
                }
                else if (connType == DbConnType.POSTGRESQL)
                {
                    result = $"{sym} interval '{Value} hours'";
                }
                else
                {
                    result = $"{sym}{Value}/24.0";
                }
                break;

            case DATEPART.MINUTE:     //分时
                if (connType.IsMySQL())
                {
                    result = $"{sym} INTERVAL {Value} MINUTE";
                }
                else if (connType == DbConnType.POSTGRESQL)
                {
                    result = $"{sym} interval '{Value} minutes'";
                }
                else
                {
                    result = $"{sym}{Value}/1440.0";
                }
                break;

            case DATEPART.SECOND:
                if (connType.IsMySQL())
                {
                    result = $"{sym} INTERVAL {Value} seconds";
                }
                else if (connType == DbConnType.POSTGRESQL)
                {
                    result = $"{sym} interval '{Value} seconds'";
                }
                else
                {
                    result = $"{sym}{Value}/86400.0";
                }
                break;
            }
            return(result);
        }
Пример #20
0
 public static bool IsOracle(this DbConnType dbConnType) => dbConnType == DbConnType.ORACLE || dbConnType == DbConnType.ODPNET;