private TestConsole(IDbEngine engine, ILoggerFactory loggerFactory) { _engine = engine; _logger = new LoggerHelper(loggerFactory.GetLogger(typeof(TestConsole)), Assembly.GetExecutingAssembly(), "StringConstants"); }
public string GenerateCode(IDbEngine engine, SettingInfo setting, string sql) { List<ColumnInfo> columns = new List<ColumnInfo>(); engine.Execute(sql).ToReader(reader => { reader.Read(); for(int i = 0; i < reader.FieldCount; i++) { var column = new ColumnInfo() { Name = reader.GetName(i), }; column.SetType(reader.GetFieldType(i)); columns.Add(column); } }); var code = this.GenerateCode(columns, setting, "自定义语句"); code = "/*********** SQL **********\r\n\r\n" + sql + "\r\n\r\n********** SQL ***********/\r\n\r\n" + code; return code; }
private void InsertCountTest(IDbEngine engine) { Assert.Equal(10000 , engine .Execute("SELECT COUNT(*) FROM TestTable") .ToScalar<int>() ); }
private void InsertPerformanceTest(IDbEngine engine) { for(int i = 0; i < 10000; i++) { engine.Execute("INSERT INTO TestTable(UserName) VALUES (@username)", "@username", "user" + i) .ToNonQuery(); } }
/// <summary> /// 解析参数集合,并用 AND 符拼接 WHERE 语句。 /// </summary> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="ps">参数集合。</param> /// <param name="binary">二元运算符。</param> public static WhereParameters Parse(IDbEngine engine, ExecuteParameterCollection ps = null, string binary = "AND") => new WhereParameters(engine.CreateWhere(ps, binary), ps);
/// <summary> /// 解析匿名对象参数集合,并用 AND 符拼接 WHERE 语句。 /// </summary> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="objectInstance">匿名参数集合实例。</param> /// <param name="binary">二元运算符。</param> public static WhereParameters Parse(IDbEngine engine, object objectInstance, string binary = "AND") => Parse(engine, new ExecuteParameterCollection(objectInstance), binary);
/// <summary> /// 表示 <see cref="Executed"/> 事件的处理方法。 /// </summary> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="type">执行的类型。</param> /// <param name="result">操作的返回值。</param> /// <param name="command">执行的命令。</param> /// <param name="dbCommand">执行的 <see cref="DbCommand"/>。</param> internal protected virtual void OnExecuted(IDbEngine engine, ExecuteType type, ExecuteCommand command, DbCommand dbCommand, object result) => this.Executed?.Invoke(engine, command.GetEventArgs(type, dbCommand, result));
/// <summary> /// 表示 <see cref="Executing"/> 事件的处理方法。 /// </summary> /// <param name="engine">数据源查询与交互引擎的实例。</param> /// <param name="type">执行的类型。</param> /// <param name="command">执行的命令。</param> /// <param name="dbCommand">执行的 <see cref="DbCommand"/>。</param> internal protected virtual void OnExecuting(IDbEngine engine, ExecuteType type, ExecuteCommand command, DbCommand dbCommand) => this.Executing?.Invoke(engine, command.GetEventArgs(type, dbCommand, null));
public string GenerateCode(IDbEngine engine, SettingInfo setting) { var columnInfos = engine.Execute(@" SELECT a.Name, t.name as DbType, a.max_length as MaxLength, IsPrimaryKey=case when exists(SELECT 1 FROM sys.objects where type='PK' and name in ( SELECT name FROM sys.indexes WHERE index_id in( SELECT indid FROM sys.sysindexkeys WHERE id = a.object_id AND colid=a.column_id ))) then 1 else 0 end, IsNullable=a.is_nullable, Comments=isnull(g.[value],'') FROM sys.columns a inner join sys.objects d on a.object_id=d.object_id and d.name<>'dtproperties' inner join sys.types t on a.user_type_id=t.user_type_id left join sys.extended_properties g on a.object_id=g.major_id and a.column_id=g.minor_id WHERE d.Name=@tableName ORDER BY a.column_id", "@tableName", this.Name) .ToEntities<ColumnInfo>(); //var table = engine.Execute("SELECT * FROM " + this.Name + " WHERE 1=2").ToTable(); //var columns = table.Columns; //foreach(var item in columnInfos) //{ // item.SetType(columns[item.Name].DataType); //} return GenerateCode(columnInfos, setting, this.Type == ObjectType.Table ? "数据库表对象" : "数据库视图对象"); }
internal SqlBuilder(IDbEngine engine) { this._engine = engine; }