/// <summary> /// 创建Command并绑定参数 /// </summary> public virtual DbCommand CreateCommand(string sql, Expression <Func <EntityType, bool> > predicate) { AddFragment(sql); Visit(predicate); var command = Database.GetSqlStringCommand(Sql); foreach (var p in Parameters) { Database.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value); } return(command); }
/// <summary> /// Verifies the specified control. /// </summary> /// <param name="control">The control.</param> /// <returns></returns> public IEnumerable <string> Verify(xControl control) { var verificationResults = new List <string>(); var dbColumnLength = DbTypeParser.GetColumnLength(control.DBType); var maxLength = control.MaxLength; if (dbColumnLength < maxLength) { verificationResults.Add(string.Format("{0}: Database column length is lesser than the value specified in MaxLength attribute. {1}", control.Caption, Environment.NewLine)); } return(verificationResults); }
/// <summary> /// Generates the default value test case. /// </summary> /// <param name="control">The control.</param> /// <returns></returns> private TestCaseComponent GenerateDefaultValueTestCase(xControl control) { if (!string.IsNullOrEmpty(control.Value) || control.PrimaryKey) { return(null); } var length = Math.Min(DbTypeParser.GetColumnLength(control.DBType), control.MaxLength); var testValue = RandomValueHelper.GenerateRandomString(length); return(new TestCaseComponent { Name = $"{control.Name}_Default", Type = TestCaseType.DEFAULT, TestCaseSetter = string.Format("SetTextbox(\"{0}\", \"{1}\");", control.Name, testValue), TestCaseDBValidator = string.Format("Assert_Data(\"{0}\", \"{1}\");", control.Name, testValue), TestCaseEditModeValidator = string.Format("AssertTextbox(\"{0}\", \"{1}\");", control.Name, testValue), TestCaseViewModeValidator = string.Format("AssertTextbox(\"{0}\", \"{1}\");", control.Name, testValue), Description = string.Empty, WillSaveSucceed = true }); }
/// <summary> /// /// </summary> /// <param name="member"></param> public ReflectionMemberDescriptor(MemberInfo member) { if (member == null) { throw new ArgumentNullException(nameof(member)); } Member = member; var type = member.MemberType == MemberTypes.Field ? ((FieldInfo)member).FieldType : member.MemberType == MemberTypes.Property ? ((PropertyInfo)member).PropertyType : null; if (type == null) { throw new NotSupportedException("invalid member type :" + member.MemberType); } Type = type; Name = member.Name; DbType = DbTypeParser.Parse(Type); DbGenerated = false; }
public void ParseNumber() { var result = DbTypeParser.GetColumnLength("varchar(10)"); Assert.AreEqual(10, result); }
public void ParseString() { var result = DbTypeParser.GetColumnLength("varchar(max)"); Assert.AreEqual(4000, result); }
/// <summary> /// /// </summary> /// <param name="descriptor"></param> /// <returns></returns> public Action <IDatabase, TEntity, Expression <Func <TEntity, bool> > > Create(EntityDescriptor descriptor) { var sets = AttributeDescriptorFactory.Create <TSet>().Members.Select(_ => _.Member.Name).ToArray(); var members = descriptor.Members.Where(_ => sets.Contains(_.Member.Name)).Select((_, i) => new MemberTuple <TEntity>( _.Name, _.DbType, buildParameter("p_set_" + i), MemberAccessor <TEntity, object> .GetGetter(_.Member) )).ToArray(); if (members.Length == 0) { throw new InvalidOperationException("未设置更新列集合"); } if (quote != null) { var sql = new StringBuilder("UPDATE ") .Append(string.IsNullOrEmpty(descriptor.Schema) ? null : (quote(descriptor.Schema) + '.')) .AppendLine(quote(descriptor.Name)) .Append(" SET ") .AppendJoin(", ", members.Select(_ => quote(_.Name) + " = " + _.ParameterName)) .AppendLine() .Append(" WHERE ").ToString(); return((db, entity, predicate) => { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (predicate == null) { throw new ArgumentNullException(nameof(predicate)); } var visitor = visitorProvider(db); visitor.AddFragment(sql); visitor.Visit(predicate); using (var command = db.GetSqlStringCommand(visitor.Sql)) { foreach (var member in members) { db.AddInParameter(command, member.ParameterName, member.DbType, member.Getter(entity)); } foreach (var p in visitor.Parameters) { db.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value); } db.ExecuteNonQuery(command); } }); } return((db, entity, predicate) => { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (predicate == null) { throw new ArgumentNullException(nameof(predicate)); } var sql = new StringBuilder("UPDATE ") .Append(string.IsNullOrEmpty(descriptor.Schema) ? null : (db.QuoteName(descriptor.Schema) + '.')) .AppendLine(db.QuoteName(descriptor.Name)) .Append(" SET ") .AppendJoin(", ", members.Select(_ => db.QuoteName(_.Name) + " = " + db.BuildParameterName(_.ParameterName))) .AppendLine() .Append(" WHERE ").ToString(); var visitor = visitorProvider(db); visitor.AddFragment(sql); visitor.Visit(predicate); using (var command = db.GetSqlStringCommand(visitor.Sql)) { foreach (var member in members) { db.AddInParameter(command, member.ParameterName, member.DbType, member.Getter(entity)); } foreach (var p in visitor.Parameters) { db.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value); } db.ExecuteNonQuery(command); } }); }