/// <summary> /// This method configures OLEDB dependency /// </summary> private static void AddDependency() { // Scripts are provided to enable // DBNotifications to NCache // Notification based DBDependency // JDBC connectionString string connectionString = System.Configuration.ConfigurationManager.AppSettings["conn-string"]; if (String.IsNullOrEmpty(connectionString)) { Console.WriteLine("The connection string cannot be null or empty."); return; } for (int i = 0; i < 10; i++) { string key = i + ":dbo.Products"; // Cache key for product id 10 will be "10:dbo.Products" CacheDependency dependency = DBDependencyFactory.CreateOleDbCacheDependency(connectionString, key); CacheItem cacheItem = new CacheItem(i); cacheItem.Dependency = dependency; _cache.Insert(key, cacheItem); } Console.WriteLine("Products added in the cache with OLEDB cache dependency."); // To Verify that the polling dependency works uncomment the following code. // The code waits for the user to update products with productId 6. // Once the item is updated in the database the cache item is invalidated and thus removed from the cache. //Console.WriteLine("Update product with id 6 in database and press enter..."); //Console.Read(); //// Demo is specified for cache_key 6:oldRow.Products //if (_cache.Contains("6:oldRow.Products")) //{ // Console.WriteLine("Database dependency did not work as expected. " + "Check your connection string and sql command syntax."); //} //else //{ // Console.WriteLine("6:oldRow.Products removed due to OLE DB dependency."); //} }
public override CacheDependency CreateDependency( string connectionString) { if (string.IsNullOrWhiteSpace(QualifiedTableName)) { throw new Exception(nameof(QualifiedTableName)); } if (DatabaseType == DatabaseType.Sql) { return(DBDependencyFactory.CreateSqlCacheDependency( connectionString, $"{QualifiedTableName}:ALL")); } else { var connString = $"Provider=OraOLEDB.Oracle;{connectionString}"; return(DBDependencyFactory.CreateOleDbCacheDependency( connString, $"{QualifiedTableName}:ALL")); } }
private CacheDependency GetNonAggregateDependencies(ExpirationHint hint) { if (hint is KeyDependency) { KeyDependency keyDep = (KeyDependency)hint; return(new Runtime.Dependencies.KeyDependency(keyDep.CacheKeys, new DateTime(keyDep.StartAfterTicks))); } else if (hint is FileDependency) { FileDependency fileDep = (FileDependency)hint; return(new Runtime.Dependencies.FileDependency(fileDep.fileNames, new DateTime(fileDep.StartAfterTicks))); } else if (hint is OleDbCacheDependency) { OleDbCacheDependency oleDbDep = (OleDbCacheDependency)hint; return(DBDependencyFactory.CreateOleDbCacheDependency(oleDbDep.ConnectionString, oleDbDep.DbCacheKey)); } else if (hint is Sql7CacheDependency) { Sql7CacheDependency sql7Dep = (Sql7CacheDependency)hint; return(DBDependencyFactory.CreateSqlCacheDependency(sql7Dep.ConnectionString, sql7Dep.DbCacheKey)); } else if (hint is OracleCacheDependency) { OracleCacheDependency oracleDep = (OracleCacheDependency)hint; Dictionary <string, OracleCmdParams> parameters = new Dictionary <string, OracleCmdParams>(); IDictionaryEnumerator enu = oracleDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); OracleCommandParams cmdParam = (OracleCommandParams)enu.Value; OracleCmdParams commandParam = new OracleCmdParams(); commandParam.Direction = (OracleParameterDirection)cmdParam.Direction; commandParam.Type = (OracleCmdParamsType)cmdParam.Type; commandParam.Value = cmdParam.Value; parameters.Add(key, commandParam); } Runtime.Dependencies.OracleCacheDependency oraDep = new Runtime.Dependencies.OracleCacheDependency(oracleDep.ConnectionString, oracleDep.QueryString, (OracleCommandType)oracleDep.CommandType, parameters); return(oraDep); } else if (hint is SqlYukonCacheDependency) { SqlYukonCacheDependency yukonDep = (SqlYukonCacheDependency)hint; Dictionary <string, Runtime.Dependencies.SqlCmdParams> parameters = new Dictionary <string, Runtime.Dependencies.SqlCmdParams>(); IDictionaryEnumerator enu = yukonDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); SqlCmdParams param = (SqlCmdParams)enu.Value; Runtime.Dependencies.SqlCmdParams yukonCmdParam = new Runtime.Dependencies.SqlCmdParams(); yukonCmdParam.SqlParamDir = param.Direction; yukonCmdParam.Type = (CmdParamsType)param.DbType; yukonCmdParam.IsNullable = param.IsNullable; yukonCmdParam.LocaleID = param.LocaleID; yukonCmdParam.Offset = param.Offset; yukonCmdParam.Precision = param.Precision; yukonCmdParam.Scale = param.Scale; yukonCmdParam.Size = param.ParamSize; yukonCmdParam.SourceColumn = param.SourceColumn; yukonCmdParam.SourceColumnNullMapping = param.SourceColumnNullMapping; yukonCmdParam.SqlValue = param.SqlValue; yukonCmdParam.SourceVersion = (SqlDataRowVersion)(int)param.SrcVersion; yukonCmdParam.TypeName = param.TypeName; yukonCmdParam.UdtTypeName = param.UdtName; yukonCmdParam.Value = param.Value; parameters.Add(key, yukonCmdParam); } Runtime.Dependencies.SqlCacheDependency sqlDep = new Runtime.Dependencies.SqlCacheDependency(yukonDep.ConnectionString, yukonDep.QueryString, (SqlCommandType)yukonDep.CommandType, parameters); return(sqlDep); } if (hint is NosDBCacheDependency) { NosDBCacheDependency nosDbDep = (NosDBCacheDependency)hint; Dictionary <string, object> parameters = new Dictionary <string, object>(); IDictionaryEnumerator enu = nosDbDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); parameters.Add(key, enu.Value); } NosDBDependency oraDep = new NosDBDependency(nosDbDep.ConnectionString, nosDbDep.QueryString, parameters, nosDbDep.Timeout); return(oraDep); } return(null); }
public static CacheDependency GetCacheDependency(ExpirationHint hint, ref DateTime absoluteExpiration, ref TimeSpan slidingExpiration) { CacheDependency cacheDependency = null; if (hint != null) { if (hint is AggregateExpirationHint) { AggregateExpirationHint aggregate = (AggregateExpirationHint)hint; IList <ExpirationHint> hints = aggregate.Hints; if (hints != null && hints.Count > 0) { foreach (ExpirationHint h in hints) { AddToDependency(ref cacheDependency, GetCacheDependency(h, ref absoluteExpiration, ref slidingExpiration)); } } } else if (hint is FixedExpiration) { absoluteExpiration = ((FixedExpiration)hint).AbsoluteTime; } else if (hint is IdleExpiration) { slidingExpiration = ((IdleExpiration)hint).SlidingTime; } else if (hint is KeyDependency) { KeyDependency keyDep = (KeyDependency)hint; AddToDependency(ref cacheDependency, new Runtime.Dependencies.KeyDependency(keyDep.CacheKeys, new DateTime(keyDep.StartAfterTicks))); } else if (hint is FileDependency) { FileDependency fileDep = (FileDependency)hint; AddToDependency(ref cacheDependency, new Runtime.Dependencies.FileDependency(fileDep.fileNames, new DateTime(fileDep.StartAfterTicks))); } else if (hint is OleDbCacheDependency) { OleDbCacheDependency oleDbDep = (OleDbCacheDependency)hint; AddToDependency(ref cacheDependency, new CacheDependency(null, null, DBDependencyFactory.CreateOleDbCacheDependency( oleDbDep.ConnectionString, oleDbDep.DbCacheKey))); } else if (hint is Sql7CacheDependency) { Sql7CacheDependency sql7Dep = (Sql7CacheDependency)hint; AddToDependency(ref cacheDependency, new CacheDependency(null, null, DBDependencyFactory.CreateSqlCacheDependency( sql7Dep.ConnectionString, sql7Dep.DbCacheKey))); } else if (hint is OracleCacheDependency) { OracleCacheDependency oracleDep = (OracleCacheDependency)hint; Dictionary <string, OracleCmdParams> parameters = new Dictionary <string, OracleCmdParams>(); IDictionaryEnumerator enu = oracleDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); OracleCommandParams cmdParam = (OracleCommandParams)enu.Value; OracleCmdParams commandParam = new OracleCmdParams(); commandParam.Direction = (OracleParameterDirection)cmdParam.Direction; commandParam.Type = (OracleCmdParamsType)cmdParam.Type; commandParam.Value = cmdParam.Value; parameters.Add(key, commandParam); } Runtime.Dependencies.OracleCacheDependency oraDep = new Runtime.Dependencies.OracleCacheDependency(oracleDep.ConnectionString, oracleDep.QueryString, (OracleCommandType)oracleDep.CommandType, parameters); AddToDependency(ref cacheDependency, oraDep); } else if (hint is SqlYukonCacheDependency) { SqlYukonCacheDependency yukonDep = (SqlYukonCacheDependency)hint; Dictionary <string, Runtime.Dependencies.SqlCmdParams> parameters = new Dictionary <string, Runtime.Dependencies.SqlCmdParams>(); IDictionaryEnumerator enu = yukonDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); SqlCmdParams param = (SqlCmdParams)enu.Value; Runtime.Dependencies.SqlCmdParams yukonCmdParam = new Runtime.Dependencies.SqlCmdParams(); yukonCmdParam.SqlParamDir = param.Direction; yukonCmdParam.Type = (CmdParamsType)param.DbType; yukonCmdParam.IsNullable = param.IsNullable; yukonCmdParam.LocaleID = param.LocaleID; yukonCmdParam.Offset = param.Offset; yukonCmdParam.Precision = param.Precision; yukonCmdParam.Scale = param.Scale; yukonCmdParam.Size = param.ParamSize; yukonCmdParam.SourceColumn = param.SourceColumn; yukonCmdParam.SourceColumnNullMapping = param.SourceColumnNullMapping; yukonCmdParam.SqlValue = param.SqlValue; yukonCmdParam.SourceVersion = (SqlDataRowVersion)(int)param.SrcVersion; yukonCmdParam.TypeName = param.TypeName; yukonCmdParam.UdtTypeName = param.UdtName; yukonCmdParam.Value = param.Value; parameters.Add(key, yukonCmdParam); } Runtime.Dependencies.SqlCacheDependency sqlDep = new Runtime.Dependencies.SqlCacheDependency(yukonDep.ConnectionString, yukonDep.QueryString, (SqlCommandType)yukonDep.CommandType, parameters); AddToDependency(ref cacheDependency, sqlDep); } else if (hint is NosDBCacheDependency) { NosDBCacheDependency nosDbDep = (NosDBCacheDependency)hint; Dictionary <string, object> parameters = new Dictionary <string, object>(); IDictionaryEnumerator enu = nosDbDep.CommandParams.GetEnumerator(); while (enu.MoveNext()) { string key = enu.Key.ToString(); parameters.Add(key, enu.Value); } NosDBDependency nosDb = new NosDBDependency(nosDbDep.ConnectionString, nosDbDep.QueryString, parameters, nosDbDep.Timeout); AddToDependency(ref cacheDependency, nosDb); } } return(cacheDependency); }
public override CacheDependency GetCacheDependency(string connectionString, object key) { if (string.IsNullOrWhiteSpace(DbCacheKey)) { throw new ArgumentException("DbCacheKey can not be empty"); } if (string.IsNullOrWhiteSpace(QualifiedTableName)) { throw new ArgumentException("Qualified table name cannot be null or empty"); } if (!DbCacheKey.Contains("[en]")) { throw new ArgumentException("DbCacheKey should have [en] placeholder for the " + "qualified table name"); } int occurrencesOfEN = CountSubStrings(DbCacheKey, "[en]"); if (occurrencesOfEN > 1) { throw new ArgumentException( "DbCacheKey can only have one occurrence of [en] substring"); } var dbCacheKey = DbCacheKey.Replace("[en]", QualifiedTableName); if (DbCacheKey.Contains("[pk]")) { int occurrencesOfPK = CountSubStrings(DbCacheKey, "[pk]"); if (occurrencesOfPK > 1) { throw new ArgumentException( "DbCacheKey can only have one occurrence of [pk] substring"); } if (!ValidateKey(key)) { if (key == null) { throw new ArgumentException($"Key cannot be null"); } throw new ArgumentOutOfRangeException( $"Key type {key.GetType().FullName} not supported"); } dbCacheKey = dbCacheKey.Replace("[pk]", key.ToString()); } if (DatabaseType == DatabaseType.Sql) { return(DBDependencyFactory.CreateSqlCacheDependency( connectionString, dbCacheKey)); } else { var connString = $"Provider=OraOLEDB.Oracle;{connectionString}"; return(DBDependencyFactory.CreateOleDbCacheDependency( connString, dbCacheKey)); } }
public static CacheDependency GetCacheDependency(Dependency dependency) { CacheDependency cacheDependency = null; if (dependency == null) { return(null); } if (dependency.keyDep.Count > 0) { for (int i = 0; i < dependency.keyDep.Count; i++) { AddToDependency(ref cacheDependency, new Runtime.Dependencies.KeyDependency( dependency.keyDep[i].keys.ToArray(), new DateTime(dependency.keyDep[i].startAfter))); } } if (dependency.fileDep.Count > 0) { for (int i = 0; i < dependency.fileDep.Count; i++) { AddToDependency(ref cacheDependency, new Runtime.Dependencies.FileDependency( dependency.fileDep[i].filePaths.ToArray(), new DateTime(dependency.fileDep[i].startAfter))); } } if (dependency.oleDbDep.Count > 0) { for (int i = 0; i < dependency.oleDbDep.Count; i++) { AddToDependency(ref cacheDependency, new CacheDependency(null, null, DBDependencyFactory.CreateOleDbCacheDependency( dependency.oleDbDep[i].connectionString, dependency.oleDbDep[i].dbCacheKey))); } } if (dependency.sql7Dep.Count > 0) { for (int i = 0; i < dependency.sql7Dep.Count; i++) { AddToDependency(ref cacheDependency, new CacheDependency(null, null, DBDependencyFactory.CreateSqlCacheDependency( dependency.sql7Dep[i].connectionString, dependency.sql7Dep[i].dbCacheKey))); } } if (dependency.oracleDep.Count > 0) { for (int i = 0; i < dependency.oracleDep.Count; i++) { Dictionary <string, OracleCmdParams> parameters = new Dictionary <string, OracleCmdParams>(); for (int pc = 0; pc < dependency.oracleDep[i].param.Count; pc++) { OracleCmdParams commandParam = new OracleCmdParams(); commandParam.Direction = (OracleParameterDirection)dependency.oracleDep[i].param[pc].cmdParam.direction; commandParam.Type = (OracleCmdParamsType)dependency.oracleDep[i].param[pc].cmdParam.dbType; commandParam.Value = dependency.oracleDep[i].param[pc].cmdParam.value; parameters.Add(dependency.oracleDep[i].param[pc].key, commandParam); } OracleCacheDependency oraDep = new OracleCacheDependency(dependency.oracleDep[i].connectionString, dependency.oracleDep[i].query, (OracleCommandType)dependency.oracleDep[i].commandType, parameters); AddToDependency(ref cacheDependency, oraDep); } } if (dependency.yukonDep.Count > 0) { for (int i = 0; i < dependency.yukonDep.Count; i++) { Dictionary <string, SqlCmdParams> parameters = new Dictionary <string, SqlCmdParams>(); for (int pc = 0; pc < dependency.yukonDep[i].param.Count; pc++) { YukonCommandParam yukonParam = dependency.yukonDep[i].param[pc].cmdParam; SqlCmdParams commandParam = new SqlCmdParams(); commandParam.CompareInfo = (SqlCmpOptions)yukonParam.cmpOptions; commandParam.Direction = (SqlParamDirection)yukonParam.direction; commandParam.IsNullable = yukonParam.isNullable; commandParam.LocaleID = yukonParam.localeId; commandParam.Offset = yukonParam.offset; commandParam.Precision = (byte)yukonParam.precision; commandParam.Scale = (byte)yukonParam.scale; commandParam.Size = yukonParam.size; commandParam.SourceColumn = yukonParam.sourceColumn; commandParam.SourceColumnNullMapping = yukonParam.sourceColumnNull; commandParam.SqlValue = yukonParam.sqlValue; commandParam.Type = (CmdParamsType)yukonParam.typeId; commandParam.TypeName = yukonParam.typeName; commandParam.UdtTypeName = yukonParam.udtTypeName; if (!yukonParam.nullValueProvided) { string val = yukonParam.value as string; if (val != null) { if (commandParam.Type == CmdParamsType.Binary || commandParam.Type == CmdParamsType.VarBinary || /*commandParam.Type == CmdParamsType.Image ||*/ commandParam.Type == CmdParamsType.Timestamp) { System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); commandParam.Value = encoding.GetBytes(val); } else if (commandParam.Type == CmdParamsType.DateTime || commandParam.Type == CmdParamsType.DateTime2 || commandParam.Type == CmdParamsType.Date || commandParam.Type == CmdParamsType.SmallDateTime) { commandParam.Value = new DateTime(Convert.ToInt64(val)); } else if (commandParam.Type == CmdParamsType.Time) { commandParam.Value = new TimeSpan(Convert.ToInt64(val)); } else if (commandParam.Type == CmdParamsType.DateTimeOffset) { string[] dateOffset = val.Split(new char[] { ',' }); commandParam.Value = new DateTimeOffset(new DateTime(Convert.ToInt64(dateOffset[0])), TimeSpan.FromMinutes(Convert.ToInt32(dateOffset[1]))); } else if (commandParam.Type == CmdParamsType.Money || commandParam.Type == CmdParamsType.SmallMoney || commandParam.Type == CmdParamsType.Decimal) { commandParam.Value = Convert.ToDecimal(val); } else if (commandParam.Type == CmdParamsType.Int) { commandParam.Value = Convert.ToInt32(val); } else if (commandParam.Type == CmdParamsType.BigInt) { commandParam.Value = Convert.ToInt64(val); } else if (commandParam.Type == CmdParamsType.SmallInt) { commandParam.Value = Convert.ToInt16(val); } else if (commandParam.Type == CmdParamsType.Real) { commandParam.Value = Convert.ToSingle(val); } else if (commandParam.Type == CmdParamsType.UniqueIdentifier) { commandParam.Value = new Guid(val); } else if (commandParam.Type == CmdParamsType.TinyInt) { commandParam.Value = Convert.ToByte(val); } else if (commandParam.Type == CmdParamsType.Float) { commandParam.Value = Convert.ToDouble(val); } else if (commandParam.Type == CmdParamsType.Bit) { commandParam.Value = Convert.ToBoolean(val); } else { commandParam.Value = val; } } } parameters.Add(dependency.yukonDep[i].param[pc].key, commandParam); } SqlCacheDependency yukonDep = new SqlCacheDependency(dependency.yukonDep[i].connectionString, dependency.yukonDep[i].query, (SqlCommandType)dependency.yukonDep[i].commandType, parameters); AddToDependency(ref cacheDependency, yukonDep); } } if (dependency.NosDep.Count > 0) { for (int i = 0; i < dependency.NosDep.Count; i++) { Dictionary <string, object> parameters = new Dictionary <string, object>(); NosDbDependency nosDependency = dependency.NosDep[i]; for (int pc = 0; pc < nosDependency.param.Count; pc++) { parameters.Add(nosDependency.param[pc].key, nosDependency.param[pc].value); } NosDBDependency NosDep = new NosDBDependency(nosDependency.connectionString, nosDependency.query, parameters, nosDependency.timeout); AddToDependency(ref cacheDependency, NosDep); } } return(cacheDependency); }