/// <summary> /// 创建DbCommand参数。 /// </summary> /// <param name="dbCommand">DbCommand对象。</param> /// <param name="commandParameter">命令参数对象。</param> /// <returns>返回ADO.NET命令参数对象。</returns> protected virtual System.Data.IDbDataParameter CreateDbCommandParameter(System.Data.IDbCommand dbCommand, CommandParameter commandParameter) { var result = dbCommand.CreateParameter(); if (commandParameter.IsReturn) { result.Direction = ParameterDirection.ReturnValue; } else { result.ParameterName = commandParameter.Name; if (commandParameter.IsOut) { result.Direction = ParameterDirection.Output; } if (commandParameter.Value == null) { result.Value = System.DBNull.Value; goto lb_Properties; } if (commandParameter.RealType.IsArray && commandParameter.RealType.GetElementType() == typeof(byte)) { result.DbType = DbType.Binary; result.Value = commandParameter.Value; goto lb_Properties; } result.Value = commandParameter.Value; } lb_Properties: foreach (System.Collections.Generic.KeyValuePair <string, object> p in commandParameter.Properties) { FastWrapper.Set(result, p.Key, p.Value); } return(result); }
private void btnOK_Click(object sender, EventArgs e) { //Symbol.Forms.SelectedItem<Funds> fundsItem = (Symbol.Forms.SelectedItem<Funds>)cbFundsId.SelectedItem; Symbol.Forms.SelectedItem <ConsumeType> consumeTypeItem = (Symbol.Forms.SelectedItem <ConsumeType>)cbConsumeTypeId.SelectedItem; if (!UIValidtion.Create() .Next(cbConsumeTypeId, p => p.SelectedIndex != -1, p => consumeTypeItem == null ? "" : consumeTypeItem.Text, "消费方式", true) .Next(dtByDate, p => p.Value.HasValue, p => p.Value == null ? "" : p.Value.Value.ToString(p.Format), "日期") .Null(txtMoney, "金额") .NumDec(0) .Null(txtRelatedPerson, "相关人") .Len(1, 10) .Result) { return; } _model = new FundsLog() { UserId = Program.CurrentUser.Id, ByDate = dtByDate.Value.Value, ByDateDay = dtByDate.DayNumber, //FundsId = fundsItem.Value.Id, ConsumeTypeId = consumeTypeItem.Value.Id, Money = Math.Abs(TypeExtensions.Convert <decimal>(txtMoney.Text, 0M)), //LastMoney= fundsItem.Value.Money, RelatedPerson = txtRelatedPerson.Text, Comment = txtComment.Text, IsOut = consumeTypeItem.Value.IsOut, }; Program.DataStore.Add(_model); //Symbol.FastWrapper.Set(_model, "FundsName", fundsItem.Value.Name); FastWrapper.Set(_model, "ConsumeTypeName", consumeTypeItem.Value.Name); DialogResult = System.Windows.Forms.DialogResult.OK; }
/// <summary> /// 设置构造器的参数。 /// </summary> /// <param name="builder"></param> /// <param name="name">参数名称。</param> /// <param name="value">参数值,为null时,自动跳过。</param> /// <param name="filter">过滤器。</param> /// <returns>返回是否操作成功。</returns> protected bool SetBuilderValue(System.Data.Common.DbConnectionStringBuilder builder, string name, object value, ValueFilter filter = null) { if (value == null) { return(false); } try { if (filter != null) { value = filter(value); if (value == null) { return(false); } } if (value is string) { if (string.IsNullOrEmpty((string)value)) { return(false); } } if (name.IndexOf(' ') > -1) { builder[name] = value; } else { FastWrapper.Set(builder, name, value, System.Reflection.BindingFlags.IgnoreCase); } return(true); } catch (System.Exception) { return(false); } }
/// <summary> /// 创建 System.Data.SQLite.SQLiteConnectionStringBuilder /// </summary> /// <param name="connectionString">连接字符串</param> /// <returns></returns> public static System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder(string connectionString) { FastWrapper wrapper = GetType("System.Data.SQLite.SQLiteConnectionStringBuilder"); if (wrapper == null) { return(null); } System.Data.Common.DbConnectionStringBuilder builder; if (string.IsNullOrEmpty(connectionString)) { builder = FastWrapper.CreateInstance(wrapper.Type) as System.Data.Common.DbConnectionStringBuilder; } else { builder = FastWrapper.CreateInstance(wrapper.Type, connectionString) as System.Data.Common.DbConnectionStringBuilder; string file = (string)FastWrapper.Get(builder, "DataSource"); if (!string.IsNullOrEmpty(file) && !file.Equals(":memory:", StringComparison.OrdinalIgnoreCase)) { CreateFile(file); } } FastWrapper.Set(builder, "Pooling", true); FastWrapper.Set(builder, "FailIfMissing", false); builder["journal mode"] = "Off"; return(builder); }
/// <summary> /// 设置对象的成员值(属性或字段)。 /// </summary> /// <param name="instance">对象实例。</param> /// <param name="name">成员名称。</param> /// <param name="value">成员的值。</param> /// <param name="indexs">索引序列(普通属性和字段不传)。</param> public static void Set( #if !net20 this #endif object instance, string name, object value, object[] indexs = null) { if (indexs == null) { FastWrapper.Set(instance, name, value, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.SetField); } FastWrapper.Set(instance, name, value, indexs, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.SetProperty | System.Reflection.BindingFlags.SetField); }
/// <summary> /// 创建 System.Data.SQLite.SQLiteConnectionStringBuilder /// </summary> /// <returns></returns> public static System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() { FastWrapper wrapper = GetType("System.Data.SQLite.SQLiteConnectionStringBuilder"); if (wrapper == null) { return(null); } System.Data.Common.DbConnectionStringBuilder builder = FastWrapper.CreateInstance(wrapper.Type) as System.Data.Common.DbConnectionStringBuilder; FastWrapper.Set(builder, "Pooling", true); FastWrapper.Set(builder, "FailIfMissing", false); builder["journal mode"] = "Off"; return(builder); }
private static void SetUseUnsafeHeaderParsing() { System.Type type = FastWrapper.GetWarpperType("System.Net.Configuration.SettingsSectionInternal,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); if (type == null) { return; } object instance = FastWrapper.Get(type, "Section"); if (instance == null) { return; } FastWrapper.Set(instance, "useUnsafeHeaderParsing", true); }
/// <summary> /// 创建 System.Data.SQLite.SQLiteConnectionStringBuilder /// </summary> /// <param name="file">文件</param> /// <param name="password">密码</param> /// <returns></returns> public static System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder(string file, string password) { System.Data.Common.DbConnectionStringBuilder builder = CreateConnectionStringBuilder(); if (!string.IsNullOrEmpty(file)) { CreateFile(file); FastWrapper.Set(builder, "DataSource", file); } FastWrapper.Set(builder, "Pooling", true); FastWrapper.Set(builder, "FailIfMissing", false); builder["journal mode"] = "Off"; if (!string.IsNullOrEmpty(password)) { FastWrapper.Set(builder, "Password", password); } return(builder); }
/// <summary> /// 创建查询参数,仅创建对象,不会追加到参数列表。 /// </summary> /// <param name="command"></param> /// <param name="parameterName">参数名称,必须以@开头。</param> /// <param name="value">参数的值。</param> /// <returns>返回参数实例。</returns> public static IDbDataParameter CreateParameter( #if !net20 this #endif IDbCommand command, string parameterName, object value) { IDbDataParameter px = value as IDbDataParameter; if (px != null) { return(px); } CommandParameter p = value as CommandParameter; object value2 = p == null ? value : p.Value; IDbDataParameter result = command.CreateParameter(); if (!string.IsNullOrEmpty(parameterName)) { result.ParameterName = parameterName; } bool processed = false; if (value2 == null) { Type type2 = p == null ? null : p.RealType; if (type2 != null) { result = CreateParameter(command, parameterName, TypeExtensions.DefaultValue(type2)); if (type2.IsArray) { result.DbType = DbType.Binary; } } result.Value = DBNull.Value; processed = true; #if !netcore } else if (value2 is DateTime) { if (result is System.Data.OleDb.OleDbParameter) { DateTime dateTime = (DateTime)value2; result.Value = dateTime.AddMilliseconds(-dateTime.Millisecond).ToOADate(); ((System.Data.OleDb.OleDbParameter)result).OleDbType = System.Data.OleDb.OleDbType.Date; result.DbType = DbType.Double; processed = true; } //} else if (result.GetType().FullName == "System.Data.SQLite.SQLiteParameter") { // DateTime dateTime = (DateTime)value2; // //result.DbType = DbType.String; // result.Value = dateTime.ToString("s"); //} #endif } else { System.Type type = value2.GetType(); #if netcore var typeInfo = type.GetTypeInfo(); #else var typeInfo = type; #endif if (typeInfo.IsEnum) { IDbDataParameter result2 = command.CreateParameter(); result2.ParameterName = result.ParameterName; result2.Value = TypeExtensions.Convert <long>(value2); result = result2; processed = true; } else if (typeInfo.IsClass && type != typeof(string)) { IDbDataParameter result2 = command.CreateParameter(); result2.ParameterName = result.ParameterName; result2.Value = Symbol.Serialization.Json.ToString(value2, true); result = result2; if (command.GetType().Namespace.StartsWith("Npgsql")) { FastWrapper.Set(result, "NpgsqlDbType", TypeExtensions.Convert("Json", NpgsqlDatabaseProvider.GetDbType())); } processed = true; } } if (p != null && p.Properties != null && p.Properties.Count > 0) { foreach (System.Collections.Generic.KeyValuePair <string, object> item in p.Properties) { FastWrapper.Set(result, item.Key, item.Value); } } if (!processed) { result.Value = value2; processed = true; } return(result); }