/// <summary> /// 使用一段sql,进行分页查询, 目前只支持sqlserver /// </summary> /// <param name="sqlText"></param> /// <param name="orderbyClause"></param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="recordCount"></param> /// <returns></returns> public DataTable Query(string sqlText, string orderbyClause, int pageIndex, int pageSize, ref int recordCount) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(sqlText, "sql"); ThrowExceptionUtil.ArgumentNotNullOrEmpty(orderbyClause, "orderbyClause"); if (pageSize > 0 && pageIndex >= 0) { if (recordCount <= 0) { CmdTextBeeCommand countBeeCommand = new CmdTextBeeCommand(this, "select count(1) as beecount from ( {0} )t".FormatWith(sqlText), null); DataTable countTable = countBeeCommand.Excute <DataTable>(); if (countTable != null && countTable.Rows.Count == 1) { int.TryParse(countTable.Rows[0]["beecount"].ToString(), out recordCount); } } } string sql = this.dbDriver.GetPagedSelectCmdText(sqlText, orderbyClause, pageIndex, pageSize); CmdTextBeeCommand queryBeeCommand = new CmdTextBeeCommand(this, sql, null); return(queryBeeCommand.Excute <DataTable>()); }
public void SendMessage(string openId, string content) { content = HttpUtility.HtmlDecode(content); bool result = WeiXinManager.Instance.SendMessage(openId, content); ThrowExceptionUtil.ArgumentConditionTrue(result, "", "发送失败!"); }
/// <summary> /// 保存数据。 /// 默认的表名就是类名, 若T类型上有指定的表名,则以此为准 /// 默认的自增列为Id,若T类型上有指定的自增列, 则以此为准。 /// 若value中的标识列大于0, 则修改。 若小于等于0, 则新增。 /// 注:主键为int /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="value">类型值</param> /// <returns>新增则返回自增列, 修改则返回本身标示列值。</returns> public int Save <T>(T value) where T : class { ThrowExceptionUtil.ArgumentNotNull(value, "value"); string identityColumnName = OrmUtil.GetIdentityColumnName <T>(); string tableName = OrmUtil.GetTableName <T>(); EntityProxy <T> entityProxy = EntityProxyManager.Instance.GetEntityProxy <T>(); object identity = entityProxy.GetPropertyValue(value, identityColumnName); ThrowExceptionUtil.ArgumentConditionTrue(identity != null, string.Empty, "未指定主键列"); if ((int)identity <= 0) { return(Insert <T>(value)); } else { BeeDataAdapter dataAdapter = BeeDataAdapter.From <T>(value); dataAdapter.RemoveKey(identityColumnName); Update(tableName, dataAdapter, SqlCriteria.New.Equal(identityColumnName, identity)); return((int)identity); } }
private T ExecuteDataReader <T>(DbDataReader dataReader) where T : class { var len = dataReader.FieldCount; EntityProxy <T> entityProxy = EntityProxyManager.Instance.GetEntityProxy <T>(); T result = entityProxy.CreateInstance() as T; for (var i = 0; i < len; i++) { string name = dataReader.GetName(i); var rawValue = dataReader.GetValue(i); try { entityProxy.SetPropertyValue(result, name, rawValue); } catch (Exception) { ThrowExceptionUtil.ThrowMessageException("setpropertyerror.name:{0} value:{1}".FormatWith(name, rawValue)); } } return(result); }
public T InsertT <T>(string tableName, BeeDataAdapter dataAdapter, bool removeIdentity) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); ThrowExceptionUtil.ArgumentNotNull(dataAdapter, "dataAdapter"); if (removeIdentity) { TableSchema tableSchema = GetTableSchema(tableName); ThrowExceptionUtil.ArgumentConditionTrue(tableSchema != null, "tableName", "can not find table. Name:{0}".FormatWith(tableName)); if (tableSchema.IdentityColumn != null) { dataAdapter.RemoveKey(tableSchema.IdentityColumn.ColumnName); } else { dataAdapter.RemoveKey(Constants.DefaultIdentityColumnName); } } T result = default(T); InsertBeeCommand insertBeeCommand = new InsertBeeCommand(this, tableName, dataAdapter, Constants.DefaultIdentityColumnName); result = insertBeeCommand.Excute <T>(); return(result); }
private void Init(bool forceFlag) { if (string.IsNullOrEmpty(mpToken) || forceFlag) { string weiXinUserName = ConfigUtil.GetAppSettingValue <string>("WeiXinUserName"); string weiXinPassword = ConfigUtil.GetAppSettingValue <string>("WeiXinPassword"); string password = SecurityUtil.MD5EncryptS(weiXinPassword).ToUpper(); Dictionary <string, string> postData = httpClient.PostingData; postData.Add("username", weiXinUserName); postData.Add("pwd", password); postData.Add("f", "json"); httpClient.Url = "https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN"; httpClient.Context.Referer = "https://mp.weixin.qq.com/"; string response = httpClient.GetString(); Match match = mpTokenRegex.Match(response); ThrowExceptionUtil.ArgumentConditionTrue(match.Success, "", "模拟登入微信公众平台失败!"); if (match.Success) { mpToken = match.Groups["token"].Value; } } }
protected override void BuildCommand() { base.dbCommand.CommandText = this.spName; base.dbCommand.CommandType = CommandType.StoredProcedure; SPSchema schema = CacheManager.Instance.GetEntity <SPSchema, string>(owner.ConnectionName, spName, TimeSpan.MaxValue, (name) => { return(owner.DbDriver.GetSpSchema(name)); }); ThrowExceptionUtil.ArgumentConditionTrue(schema != null, "tableName", "Can not find sp. Name:{0}".FormatWith(spName)); DataAdapterParser dataAdapterParser = new DataAdapterParser(owner, dataAdapter); if (dataAdapter != null) { foreach (SPParameter spParameter in schema.ParameterList) { DbParameter parameter = owner.DbDriver.CreateParameter(); parameter.ParameterName = spParameter.Name; parameter.Direction = spParameter.Direction; //parameter.DbType = spParameter.DbType; if (spParameter.DbType == "REF CURSOR") { IEntityProxy parameterProxy = EntityProxyManager.Instance.GetEntityProxyFromType(parameter.GetType()); if (parameter.GetType().Namespace == "System.Data.OracleClient") { parameterProxy.SetPropertyValue(parameter, "OracleType", 5); //parameter.DbType = (DbType)5; } else { parameterProxy.SetPropertyValue(parameter, "OracleDbType", 0x79); } } if (dataAdapter[spParameter.Name] != null) { parameter.Value = dataAdapter[spParameter.Name]; } else { if (owner.DbDriver.DbTypeMap.ContainsKey(spParameter.DbType)) { Type type = owner.DbDriver.DbTypeMap[spParameter.DbType]; parameter.Value = GetDefaultValue(type); if (spParameter.Direction == ParameterDirection.InputOutput && spParameter.MaxLength > 0) { parameter.Size = spParameter.MaxLength * 2; } } } base.dbCommand.Parameters.Add(parameter); } } }
/// <summary> /// 返回数据对应表所对应key的值。 /// </summary> /// <param name="mappingName">数据对应表名</param> /// <param name="keyValue">对应表值, 可以多个值, 以,分割</param> /// <param name="valuePropertyName"></param> /// <returns></returns> public string Mapping(string mappingName, string keyValue, string keyPropertyName, string valuePropertyName) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(mappingName, "mappingName"); List <string> list = new List <string>(); string result = string.Empty; object cacheValue = GetCachedMappingValue(mappingName); if (cacheValue != null && !string.IsNullOrEmpty(keyValue)) { string[] array = keyValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); DataTable tableValue = cacheValue as DataTable; if (tableValue != null) { foreach (string itemValue in array) { result = GetDataTableValue(tableValue, itemValue, keyPropertyName, valuePropertyName); list.Add(result); } } } return(string.Join(",", list.ToArray())); }
public IEntityProxy GetEntityProxyFromType(Type type) { ThrowExceptionUtil.ArgumentNotNull(type, "type"); ThrowExceptionUtil.ArgumentConditionTrue( !type.IsValueType && Type.GetTypeCode(type) == TypeCode.Object, "type", "the type should be class. not support {0}".FormatWith(type)); IEntityProxy result = null; try { lock (lockobject) { if (!entityProxyTable.ContainsKey(type)) { PrepareForType(type); } //Logger.Debug(string.Format("threadid:{0}", Thread.CurrentThread.ManagedThreadId)); result = entityProxyTable[type] as IEntityProxy; } } catch (Exception e) { throw new ArgumentException("Create Proxy Error. Type:{0}".FormatWith(type), e); } return(result); }
public override T Excute <T>() { ThrowExceptionUtil.ArgumentConditionTrue(owner.DbDriver is SqlServer2000Driver, string.Empty, "only sqlserver can use bulkcopy."); SqlConnection connection = owner.OpenConnection() as SqlConnection; SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection); sqlBulkCopy.BulkCopyTimeout = 50000; sqlBulkCopy.BatchSize = 1000; if (notifyHandler != null) { sqlBulkCopy.SqlRowsCopied += notifyHandler; sqlBulkCopy.NotifyAfter = notifyAfter; } if (mapping != null) { foreach (string key in mapping.Keys) { sqlBulkCopy.ColumnMappings.Add(key, mapping[key]); } } sqlBulkCopy.DestinationTableName = tableName; sqlBulkCopy.WriteToServer(data); return(default(T)); }
private DbDriver GetDbDriver(string connectionName, string providerName, string connectionString) { DbDriver driver = null; string driverName = string.Empty; DataRow[] rows = providerTable.Select(string.Format("invariantname='{0}'", providerName)); DbProviderFactory dbProviderFactory = null; if (rows != null && rows.Length > 0) { dbProviderFactory = DbProviderFactories.GetFactory(rows[0]); } else { if (string.Compare(providerName, "System.Data.SQLite", true) == 0) { dbProviderFactory = ReflectionUtil.CreateInstance("System.Data.SQLite.SQLiteFactory, System.Data.SQLite") as DbProviderFactory; } else if (string.Compare(providerName, "Npgsql", true) == 0) { dbProviderFactory = ReflectionUtil.CreateInstance("Npgsql.NpgsqlFactory, Npgsql") as DbProviderFactory; } } ThrowExceptionUtil.ArgumentConditionTrue(dbProviderFactory != null, "connectionKey", "the providerName of the connection setting '{0}' error, please check it.".FormatWith(connectionName)); string[] keyArray = connectionName.Split("#".ToCharArray()); if (keyArray.Length == 2) { string key = keyArray[0]; driverName = keyArray[1]; driver = ReflectionUtil.CreateInstance(driverNameDict[string.Format(DriverClassNameTemplate, driverName)], dbProviderFactory, connectionString, connectionName) as DbDriver; } if (driver == null) { foreach (string key in ruleDict.Keys) { if (providerName.IndexOf(key, StringComparison.CurrentCultureIgnoreCase) >= 0) { driverName = ruleDict[key]; break; } } driver = ReflectionUtil.CreateInstance(driverNameDict[string.Format(DriverClassNameTemplate, driverName)], dbProviderFactory, connectionString, connectionName) as DbDriver; } ThrowExceptionUtil.ArgumentConditionTrue(driver != null, "connectionName", "the connection setting '{0}' error, please check it.".FormatWith(connectionName)); return(driver); }
/// <summary> /// 调用存储过程。 /// 一般不推荐返回值, 直接将该信息反映在结果集中更好。 /// </summary> /// <param name="spName">存储过程名</param> /// <param name="dataAdapter">数据集</param> /// <returns>返回结果集</returns> public DataTable CallSP(string spName, BeeDataAdapter dataAdapter) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(spName, "spName"); SPBeeCommand spBeeCommand = new SPBeeCommand(this, spName, dataAdapter); return(spBeeCommand.Excute <DataTable>()); }
public DataTable ExecuteCommandWhere(string cmdTextWithWhere, SqlCriteria sqlCriteria) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(cmdTextWithWhere, "cmdTextWithWhere"); CmdTextWithWhereBeeCommand cmdTextBeeCommand = new CmdTextWithWhereBeeCommand(this, cmdTextWithWhere, sqlCriteria); return(cmdTextBeeCommand.Excute <DataTable>()); }
/// <summary> /// sql文查询 /// </summary> /// <param name="cmdText">sql文</param> /// <param name="dataAdapter">数据集</param> /// <returns>结果集</returns> public DataTable ExecuteCommand(string cmdText, BeeDataAdapter dataAdapter) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(cmdText, "cmdText"); CmdTextBeeCommand cmdTextBeeCommand = new CmdTextBeeCommand(this, cmdText, dataAdapter); return(cmdTextBeeCommand.Excute <DataTable>()); }
/// <summary> /// /// </summary> /// <param name="tableName"></param> /// <param name="dataTable"></param> /// <param name="mapping"></param> /// <param name="notifyHandler"></param> /// <param name="notifyAfter"></param> public void SqlBulkCopy(string tableName, DataTable dataTable, Dictionary <string, string> mapping, SqlRowsCopiedEventHandler notifyHandler, int notifyAfter) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); ThrowExceptionUtil.ArgumentConditionTrue(dataTable != null && dataTable.Rows.Count > 0, "dataTable", "data can not be null or empty"); SqlServerBulkCopyCommand command = new SqlServerBulkCopyCommand(this, tableName, dataTable, mapping, notifyHandler, notifyAfter); command.Excute <int>(); }
public IEnumerable <T> ExecuteDataReader <T>(string cmdText, BeeDataAdapter dataAdapter) where T : class { ThrowExceptionUtil.ArgumentNotNullOrEmpty(cmdText, "cmdText"); CmdTextBeeCommand cmdTextBeeCommand = new CmdTextBeeCommand(this, cmdText, dataAdapter); return(cmdTextBeeCommand.DataRead <T>()); }
/// <summary> /// 删除数据 /// </summary> /// <param name="tableName">表名</param> /// <param name="sqlCriteria">条件集</param> public void Delete(string tableName, SqlCriteria sqlCriteria) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); DeleteBeeCommand deleteBeeCommand = new DeleteBeeCommand(this, tableName, sqlCriteria); deleteBeeCommand.Excute <int>(); }
// Methods public UpdateBeeCommand(DbSession owner, string tableName, BeeDataAdapter data, SqlCriteria sqlCriteria) : base(owner, BeeDbCommandBehavior.NoQuery) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); ThrowExceptionUtil.ArgumentConditionTrue(data != null && data.Count != 0, "data", "data should not be null or empty."); this.tableName = tableName; this.dataAdapter = data; this.sqlCriteria = sqlCriteria; }
/// <summary> /// 更新数据 /// </summary> /// <param name="tableName">表名</param> /// <param name="dataAdapter">数据集</param> /// <param name="sqlCriteria">条件集</param> public void Update(string tableName, BeeDataAdapter dataAdapter, SqlCriteria sqlCriteria) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); ThrowExceptionUtil.ArgumentNotNull(dataAdapter, "dataAdapter"); UpdateBeeCommand updateBeeCommand = new UpdateBeeCommand(this, tableName, dataAdapter, sqlCriteria); updateBeeCommand.Excute <int>(); }
protected override void BuildCommand() { string whereClause = string.Empty; string orderbyClauseValue = string.Empty; if (sqlCriteria != null) { this.sqlCriteria.Owner = owner; whereClause = string.Format("{0}", sqlCriteria.WhereClause); base.dbCommand.Parameters.AddRange(sqlCriteria.DbParameters.ToArray()); TableSchema tableSchema = owner.GetTableSchema(tableName); } else { whereClause = "1=1"; } if (!string.IsNullOrEmpty(orderbyClause)) { ThrowExceptionUtil.ArgumentConditionTrue( !Regex.IsMatch(orderbyClause, @"[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|\*|!|\']") , string.Empty, "orderbyClause contains invalid code"); orderbyClauseValue = string.Format("order by {0}", orderbyClause); } // 分页的三个条件, 起始页, 页大小, 排序规则 if (pageSize > 0 && pageIndex >= 0) { if (string.IsNullOrEmpty(orderbyClause)) { orderbyClauseValue = string.Format("order by {0}", Constants.DefaultIdentityColumnName); } if (tableName.IndexOf(" join ") < 0) { tableName = owner.DbDriver.FormatField(tableName); } base.dbCommand.CommandText = owner.DbDriver.GetPagedSelectCmdText(selectClause, tableName, whereClause, orderbyClauseValue, pageIndex, pageSize); } else { base.dbCommand.CommandText = string.Format( @"select {0} from {1} where {2} {3}", selectClause, owner.DbDriver.FormatField(tableName), whereClause, orderbyClauseValue); } }
/// <summary> /// 注册数据源 /// </summary> /// <param name="connectionName">连接字符串名</param> /// <param name="providerName">数据源名</param> /// <param name="connectionString">连接字符串</param> public static void Register(string connectionName, string providerName, string connectionString) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(connectionName, "connectionName"); ThrowExceptionUtil.ArgumentNotNullOrEmpty(providerName, "providerName"); ThrowExceptionUtil.ArgumentNotNullOrEmpty(connectionString, "connectionString"); DbDriverFactory.Instance.RegisterDbDriver(connectionName, providerName, connectionString); InitDefaultDbSession(); }
/// <summary> /// 查询数据 /// </summary> /// <param name="tableName">表名</param> /// <param name="selectClause">需要查询的字段集</param> /// <param name="sqlCriteria">条件集</param> /// <param name="orderbyClause">排序集</param> /// <param name="pageIndex">起始页</param> /// <param name="pageSize">页大小</param> /// <param name="recordCount">结果集大小</param> /// <returns>结果集</returns> public DataTable Query(string tableName, string selectClause, SqlCriteria sqlCriteria, string orderbyClause, int pageIndex, int pageSize, ref int recordCount) { ThrowExceptionUtil.ArgumentNotNullOrEmpty(tableName, "tableName"); DataTable cacheData = CacheManager.Instance.GetEntity <DataTable>(Constants.DBTableCacheName.FormatWith(tableName)); // 需要被缓存 if (cacheData != null) { if (cacheData.Rows.Count == 0) { QueryBeeCommand queryBeeCommand = new QueryBeeCommand(this, tableName, "*", null, orderbyClause, -1, -1); cacheData = queryBeeCommand.Excute <DataTable>(); CacheManager.Instance.AddEntity <DataTable>(Constants.DBTableCacheName.FormatWith(tableName), cacheData, TimeSpan.MaxValue); } DataTable result = DataUtil.Query(cacheData, sqlCriteria, orderbyClause, pageIndex, pageSize, ref recordCount); return(result); } else { QueryBeeCommand queryBeeCommand = new QueryBeeCommand(this, tableName, selectClause, sqlCriteria, orderbyClause, pageIndex, pageSize); DataTable result = queryBeeCommand.Excute <DataTable>(); if (pageSize > 0 && pageIndex >= 0) { if (recordCount <= 0) { QueryBeeCommand countBeeCommand = new QueryBeeCommand(this, tableName, "count(*) as beecount", sqlCriteria, null, -1, -1); DataTable countTable = countBeeCommand.Excute <DataTable>(); if (countTable != null && countTable.Rows.Count == 1) { int.TryParse(countTable.Rows[0]["beecount"].ToString(), out recordCount); } } } else { recordCount = result.Rows.Count; } return(result); } }
public static void Main(string[] args) { /* * TODO * commonのThrowExceptionUtilクラスのメソッドを呼び出した後、 * 後続の処理も行うように修正してください。 * ThrowExceptionUtilクラスは変更せずに下の処理を修正することで完成してください。 */ // ※メソッドが呼び出されました。例外が発生し、後続の処理を行いました。 と表示されれば正解 ThrowExceptionUtil.ExceptioinMethod(); Console.WriteLine("後続の処理を行いました。"); }
public SqlCriteria Or(SqlCriteria sqlCriteria) { ThrowExceptionUtil.ArgumentNotNull(sqlCriteria, "sqlCriteria"); blurFlag = true; if (sqlCriteria.innerList.Count != 0 || sqlCriteria.root.Count != 0) { root.Add(sqlCriteria.guid, sqlCriteria); expression = string.Format("({0} or {1})", expression, sqlCriteria.guid); } return(this); }
protected override DbDriver CreateInstance(string connectionName) { DbDriver driver = null; string driverName = string.Empty; ConnectionStringSettings setting = ConfigUtil.InnerGetConnectionString(connectionName); ThrowExceptionUtil.ArgumentConditionTrue(setting != null, "connectionKey", "there is no connectionKey named '{0}'".FormatWith(connectionName)); driver = GetDbDriver(connectionName, setting.ProviderName, setting.ConnectionString); return(driver); }
public T Take() { lock (lockObject) { T result = default(T); ThrowExceptionUtil.ArgumentConditionTrue(innerQueue.Count > 0, string.Empty, "there is no item in queue"); queueSizeLatch.CountDown(); result = innerQueue.Dequeue(); return(result); } }
public Criterion(string name, object value, CriterionType type, CriterionModel model) { ThrowExceptionUtil.ArgumentNotNullOrEmpty("name", name); // 若是Enum, 转换成数字匹配 if (value is Enum) { value = (int)value; } this.leftExpression = name; this.value = value; this.criterionType = type; this.criterionModel = model; }
public PropertySchema this[string propertyName] { get { ThrowExceptionUtil.ArgumentNotNullOrEmpty(propertyName, "propertyName"); foreach (PropertySchema item in GetPropertyList()) { if (string.Compare(item.Name, propertyName, true) == 0) { return(item); } } return(null); } }
public bool SendMessage(string openId, string content) { bool result = false; Init(false); Dictionary <string, string> postData = httpClient.PostingData; postData.Add("tofakeid", openId); postData.Add("token", MPToken); postData.Add("type", "1"); postData.Add("content", content); postData.Add("ajax", "1"); httpClient.Url = " https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN "; httpClient.Context.Referer = "https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=message/send&action=index&tofakeid={0}&token={1}&lang=zh_CN".FormatWith(openId, MPToken); string response = httpClient.GetString(); Match match = wxGeneralResultRegext.Match(response); if (match.Success) { string ret = match.Groups["ret"].Value; string msg = match.Groups["msg"].Value; if (ret == "0") { result = true; } else { Init(true); } } ThrowExceptionUtil.ArgumentConditionTrue(result, "", "发送失败!"); return(result); }
/// <summary> /// 新增数据。 /// 默认的表名就是类名, 若T类型上有指定的表名,则以此为准 /// 默认的自增列为Id,若T类型上有指定的自增列, 则以此为准。 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="value">类型值</param> /// <param name="removeIdentity">是否移除标示列,该值若为false, 则Insert语句中将可能包含自增列。</param> /// <returns>插入返回的自增列</returns> public int Insert <T>(T value, bool removeIdentity) where T : class { ThrowExceptionUtil.ArgumentNotNull(value, "value"); Type typeInfo = typeof(T); EntityProxy <T> entityProxy = EntityProxyManager.Instance.GetEntityProxy <T>(); string tableName = OrmUtil.GetTableName <T>(); string identityColumnName = OrmUtil.GetIdentityColumnName <T>(); BeeDataAdapter dataAdapter = BeeDataAdapter.From <T>(value); int result = Insert(tableName, dataAdapter, removeIdentity); if (result != -1) { entityProxy.SetPropertyValue(value, identityColumnName, result); } return(result); }