using System.Collections.Generic;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace CommonLibrary.DataAccess
public class BaseDataAccess
private String dataBaseConfigName = null;
protected BaseDataAccess(String dataBase)
this.dataBaseConfigName = dataBase;
this.logger = LogManager.GetLogger("CommonLibrary");
protected BaseDataAccess()
this.logger = LogManager.GetLogger("CommonLibrary");
protected Database GetDB()
if (String.IsNullOrEmpty(dataBaseConfigName))
return DatabaseFactory.CreateDatabase();
return DatabaseFactory.CreateDatabase(dataBaseConfigName);
protected DbCommand CreateCommand(Database db, String spName, params object[] parameters)
return db.GetStoredProcCommand(spName);
return db.GetStoredProcCommand(spName, parameters);
public IDataReader GetReader(string sql, params object[] parameters)
Database db = this.GetDB();
DbCommand dbCommand = this.CreateCommand(db, sql, parameters);
foreach (SqlParameter parameter in dbCommand.Parameters)
if (parameter.SqlDbType != SqlDbType.Structured)
string name = parameter.TypeName;
int index = name.IndexOf(".");
name = name.Substring(index + 1);
parameter.TypeName = name;
return db.ExecuteReader(dbCommand);
public IDataReader GetSqlReader(string sqlString)
Database db = this.GetDB();
DbCommand dbCommand = db.GetSqlStringCommand(sqlString);
return db.ExecuteReader(dbCommand);
public IDataReader GetReader(string sql)
Database db = this.GetDB();
DbCommand dbCommand = db.GetSqlStringCommand(sql);
return db.ExecuteReader(dbCommand);
protected DataTable LoadTable(String spName, params object[] parameters)
return LoadTable(spName);
using (IDataReader dataReader = GetReader(spName, parameters))
DataTable tempTable = new DataTable();
tempTable.Load(dataReader, System.Data.LoadOption.OverwriteChanges);
protected DataTable LoadTable(String spName)
DataTable tempTable = new DataTable();
using (IDataReader dataReader = GetReader(spName))
tempTable.Load(dataReader, System.Data.LoadOption.OverwriteChanges);
protected DataTable LoadTableWithSql(String sqlString)
DataTable tempTable = new DataTable();
using (IDataReader dataReader = GetSqlReader(sqlString))
tempTable.Load(dataReader, System.Data.LoadOption.OverwriteChanges);
protected int ExecuteNonQuery(String spName, params object[] parameters)
DbCommand dbCommand = CreateCommand(myDB, spName, parameters);
return (int)myDB.ExecuteNonQuery(dbCommand);
protected int ExecuteNonQuery(String spName, TimeSpan timeout, params object[] parameters)
DbCommand dbCommand = CreateCommand(myDB, spName, parameters);
dbCommand.CommandTimeout = (int)timeout.TotalSeconds;
return (int)myDB.ExecuteNonQuery(dbCommand);
protected string ExecuteQuery(String spName, params object[] parameters)
object k = ExecuteScalar(spName, parameters);
protected object ExecuteScalar(String spName, params object[] parameters)
return myDB.ExecuteScalar(spName, parameters);
protected object ExecuteScalarFromSql(String sqlString)
DbCommand dbCommand = myDB.GetSqlStringCommand(sqlString);
return myDB.ExecuteScalar(dbCommand);
protected DataSet LoadDataSet(String spName, params object[] parameters)
DbCommand dbCommand = CreateCommand(myDB, spName, parameters);
DataSet temp = myDB.ExecuteDataSet(dbCommand);
protected bool BulkInsert(string tableName, DataTable dt)
SqlConnection connection = null;
connection = myDB.CreateConnection() as SqlConnection;
SqlBulkCopyOptions.TableLock |
SqlBulkCopyOptions.FireTriggers |
SqlBulkCopyOptions.UseInternalTransaction,
bulkCopy.DestinationTableName = tableName;
bulkCopy.WriteToServer(dt);
protected bool BulkInsert(string tableName, DataTable dt, SqlConnection connection)
SqlBulkCopy bulkCopy = new SqlBulkCopy
SqlBulkCopyOptions.FireTriggers,
bulkCopy.DestinationTableName = tableName;
if (connection.State != ConnectionState.Open)
bulkCopy.WriteToServer(dt);
public DbConnection GetConnection(string sp)
Database db = this.GetDB();
DbCommand dbCommand = this.CreateCommand(db, sp);
db.ExecuteNonQuery(dbCommand);
return dbCommand.Connection;
----------------------------------------------
namespace CommonLibrary.ServiceClients
public class InventoryServiceClient : IInventoryServiceClient
private const String MESSAGEID = "MessageId";
private const String NS = "http://www.lcwaikiki.com";
private InventoryCache cacheManager;
private ServiceContract.Services.IInventoryService serviceClient;
private static volatile InventoryServiceClient instance;
private static object syncRoot = new Object();
private bool LocalCacheEnabled = false;
private InventoryServiceClient()
string clientCacheEnabled = System.Configuration.ConfigurationManager.AppSettings["InventoryServiceClientCacheEnabled"];
if (!string.IsNullOrEmpty(clientCacheEnabled))
Boolean.TryParse(clientCacheEnabled, out LocalCacheEnabled);
if (this.serviceClient == null)
this.serviceClient = ServiceProvider.ServiceProvider.GetInventoryService();
cacheManager = new InventoryCache();
this.logger = LogManager.GetLogger(GetType());
private InventoryServiceClient(IEndpointBehavior theBehavior)
if (this.serviceClient == null)
this.serviceClient = ServiceProvider.ServiceProvider.GetInventoryService(theBehavior);
cacheManager = new InventoryCache();
this.logger = LogManager.GetLogger(GetType());
private InventoryServiceClient(bool reset)
this.serviceClient = ServiceProvider.ServiceProvider.GetInventoryService(reset);
this.logger = LogManager.GetLogger(GetType());
public static void Reset()
instance = new InventoryServiceClient(true);
public static InventoryServiceClient GetInstance()
instance = new InventoryServiceClient();
public static InventoryServiceClient GetInstance(IEndpointBehavior theBehavior)
return new InventoryServiceClient(theBehavior);
public ProductList GetProducts(byte productGroupId, byte genderId, Int16 categoryId, Int32 pageSize, Int32 pageIndex, List<Filter> filters,
ProductOrderEnum orderby, string culture, FilteringTypeEnum filteringType, ECommerceWebContext context, byte baseProductGroupId, HashSet<int> optionIds = null)
ProductList productList = null;
string cacheKey = string.Empty;
bool useLocalCache = this.LocalCacheEnabled && (optionIds == null || !optionIds.Any());
cacheKey = cacheManager.GetKey(productGroupId, genderId, categoryId, pageSize, pageIndex, filters, orderby, culture, filteringType, context.RegionId, baseProductGroupId);
productList = cacheManager.GetProductList(cacheKey);
CatalogQueryRequest cqr = new CatalogQueryRequest
ProductGroupID = productGroupId,
FilteringType = filteringType,
ApplicationId = context.ApplicationId,
IsOperator = context.IsOperator,
RegionId = context.RegionId,
BaseProductGroupId = baseProductGroupId,
ABSettings = context.AbSettings,
DateTime startedAt = DateTime.Now;
CatalogQueryResponse response = serviceClient.GetProducts(cqr);
TimeSpan ts = DateTime.Now.Subtract(startedAt);
logger.Warn(String.Format("inventoryServiceClient.GetProducts-1 execution time higher than 3 secs TotalMs:{0}", ts.TotalMilliseconds));
productList = response.ProductList;
if (useLocalCache && productList != null && productList.ProductSummaryList != null && productList.ProductSummaryList.Count > 0)
cacheManager.SetProducts(cacheKey, productList);