diff --git a/API.md b/API.md index 130b4a3..7c875dc 100644 --- a/API.md +++ b/API.md @@ -146,26 +146,26 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过 | 【条件】 | | Where | \ | Lambda | 支持多表查询表达式,多次使用相当于AND | | WhereIf | \ | bool, Lambda | 支持多表查询表达式 | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | -| WhereIf | \ | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | +| WhereIf | \ | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) | | WhereCascade | \ | Lambda | 实现多表查询时,向每个表中附加条件 | | 【分组】 | | GroupBy | \ | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) | -| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) | -| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) | +| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) | +| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) | | Disdinct | \ | | .Distinct().ToList(x => x.GroupName) 是对指定字段 | | 【排序】 | | OrderBy | \ | Lambda | 按列排序,OrderBy(a => a.Time),可多次使用 | | OrderByDescending | \ | Lambda | 按列倒向排序,OrderByDescending(a => a.Time) | -| OrderBy | \ | string, parms | 按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 }) | +| OrderBy | \ | string, parms | 按原生sql语法排序,OrderBy("count(name) + @cc", new { cc = 1 }) | | OrderByPropertyName | string, bool | 按属性名字符串排序(支持导航属性) | | 【联表】 | | LeftJoin | \ | Lambda | 左联查询,可使用导航属性,或指定关联的实体类型 | | InnerJoin | \ | Lambda | 联接查询,可使用导航属性,或指定关联的实体类型 | | RightJoin | \ | Lambda | 右联查询,可使用导航属性,或指定关联的实体类型 | -| LeftJoin | \ | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | -| InnerJoin | \ | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | -| RightJoin | \ | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | +| LeftJoin | \ | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | +| InnerJoin | \ | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | +| RightJoin | \ | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | | From | \ | Lambda | 多表查询,3个表以上使用非常方便,目前设计最大支持10个表 | | 【其他】 | | As | \ | string alias = "a" | 指定别名 | @@ -219,9 +219,9 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过 | Set | \ | Lambda, value | 设置列的新值,Set(a => a.Name, "newvalue") | | Set | \ | Lambda | 设置列的的新值为基础上增加,Set(a => a.Clicks + 1),相当于 clicks=clicks+1 | | SetDto | \ | object | 根据 dto 更新的方法 | -| SetRaw | \ | string, parms | 设置值,自定义SQL语法,SetRaw("title = ?title", new { title = "newtitle" }) | +| SetRaw | \ | string, parms | 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" }) | | Where | \ | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | | Where | \ | T1 \| IEnumerable\ | 传入实体或集合,将其主键作为条件 | | WhereExists | \ | ISelect | 子查询是否存在 | | CommandTimeout | \ | int | 命令超时设置(秒) | @@ -238,7 +238,7 @@ DbContext 自身 = 完整事务,BaseRepository 不一定有事务(可通过 | 方法 | 返回值 | 参数 | 描述 | | - | - | - | - | | Where | \ | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | | Where | \ | T1 \| IEnumerable\ | 传入实体或集合,将其主键作为条件 | | WhereExists | \ | ISelect | 子查询是否存在 | | CommandTimeout | \ | int | 命令超时设置(秒) | diff --git a/Repository.md b/Repository.md index 2d69b60..5c0e99c 100644 --- a/Repository.md +++ b/Repository.md @@ -78,7 +78,7 @@ var repo = fsql.GetRepository(); var item = repo.Where(a => a.Id == 1).First(); //此时快照 item item.Title = "newtitle"; repo.Update(item); //对比快照时的变化 -//UPDATE `tb_topic` SET `Title` = ?p_0 +//UPDATE `tb_topic` SET `Title` = @p_0 //WHERE (`Id` = 1) ``` @@ -89,7 +89,7 @@ var item = new Topic { Id = 1 }; repo.Attach(item); //此时快照 item item.Title = "newtitle"; repo.Update(item); //对比快照时的变化 -//UPDATE `tb_topic` SET `Title` = ?p_0 +//UPDATE `tb_topic` SET `Title` = @p_0 //WHERE (`Id` = 1) ``` diff --git a/修改.md b/修改.md index 355d8cb..cb1e5e2 100644 --- a/修改.md +++ b/修改.md @@ -69,7 +69,7 @@ fsql.Update() .Set(a => a.Time, DateTime.Now) .Where(a => a.Id == 1) .ExecuteAffrows(); -//UPDATE `Topic` SET `Title` = ?p_0, `Time` = ?p_1 +//UPDATE `Topic` SET `Title` = @p_0, `Time` = @p_1 //WHERE (Id = 1) ``` @@ -83,7 +83,7 @@ var repo = fsql.GetRepository(); var item = repo.Where(a => a.Id == 1).First(); //此时快照 item item.Title = "newtitle"; repo.Update(item); //对比快照时的变化 -//UPDATE `Topic` SET `Title` = ?p_0 +//UPDATE `Topic` SET `Title` = @p_0 //WHERE (`Id` = 1) ``` @@ -94,7 +94,7 @@ var item = new Topic { Id = 1 }; repo.Attach(item); //此时快照 item item.Title = "newtitle"; repo.Update(item); //对比快照时的变化 -//UPDATE `Topic` SET `Title` = ?p_0 +//UPDATE `Topic` SET `Title` = @p_0 //WHERE (`Id` = 1) ``` @@ -112,21 +112,21 @@ var item = new Topic { Id = 1, Title = "newtitle" }; fsql.Update() .SetSource(item) .ExecuteAffrows(); -//UPDATE `Topic` SET `Clicks` = ?p_0, `Title` = ?p_1, `CreateTime` = ?p_2 +//UPDATE `Topic` SET `Clicks` = @p_0, `Title` = @p_1, `CreateTime` = @p_2 //WHERE (`Id` = 1) fsql.Update() .SetSource(item) .UpdateColumns(a => new { a.Title, a.CreateTime }) .ExecuteAffrows(); -//UPDATE `Topic` SET `Title` = ?p_0, `CreateTime` = ?p_1 +//UPDATE `Topic` SET `Title` = @p_0, `CreateTime` = @p_1 //WHERE (`Id` = 1) fsql.Update() .SetSource(item) .IgnoreColumns(a => new { a.Clicks, a.CreateTime }) .ExecuteAffrows(); -//UPDATE `Topic` SET `Title` = ?p_0 +//UPDATE `Topic` SET `Title` = @p_0 //WHERE (`Id` = 1) var items = new List(); @@ -135,23 +135,23 @@ for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitl fsql.Update() .SetSource(items) .ExecuteAffrows(); -//UPDATE `Topic` SET `Clicks` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END, -//`Title` = CASE `Id` WHEN 1 THEN ?p_10 WHEN 2 THEN ?p_11 WHEN 3 THEN ?p_12 WHEN 4 THEN ?p_13 WHEN 5 THEN ?p_14 WHEN 6 THEN ?p_15 WHEN 7 THEN ?p_16 WHEN 8 THEN ?p_17 WHEN 9 THEN ?p_18 WHEN 10 THEN ?p_19 END, -//`CreateTime` = CASE `Id` WHEN 1 THEN ?p_20 WHEN 2 THEN ?p_21 WHEN 3 THEN ?p_22 WHEN 4 THEN ?p_23 WHEN 5 THEN ?p_24 WHEN 6 THEN ?p_25 WHEN 7 THEN ?p_26 WHEN 8 THEN ?p_27 WHEN 9 THEN ?p_28 WHEN 10 THEN ?p_29 END +//UPDATE `Topic` SET `Clicks` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END, +//`Title` = CASE `Id` WHEN 1 THEN @p_10 WHEN 2 THEN @p_11 WHEN 3 THEN @p_12 WHEN 4 THEN @p_13 WHEN 5 THEN @p_14 WHEN 6 THEN @p_15 WHEN 7 THEN @p_16 WHEN 8 THEN @p_17 WHEN 9 THEN @p_18 WHEN 10 THEN @p_19 END, +//`CreateTime` = CASE `Id` WHEN 1 THEN @p_20 WHEN 2 THEN @p_21 WHEN 3 THEN @p_22 WHEN 4 THEN @p_23 WHEN 5 THEN @p_24 WHEN 6 THEN @p_25 WHEN 7 THEN @p_26 WHEN 8 THEN @p_27 WHEN 9 THEN @p_28 WHEN 10 THEN @p_29 END //WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10)) fsql.Update() .SetSource(items) .IgnoreColumns(a => new { a.Clicks, a.CreateTime }) .ExecuteAffrows(); -//UPDATE `Topic` SET `Title` = CASE `Id` WHEN 1 THEN ?p_0 WHEN 2 THEN ?p_1 WHEN 3 THEN ?p_2 WHEN 4 THEN ?p_3 WHEN 5 THEN ?p_4 WHEN 6 THEN ?p_5 WHEN 7 THEN ?p_6 WHEN 8 THEN ?p_7 WHEN 9 THEN ?p_8 WHEN 10 THEN ?p_9 END +//UPDATE `Topic` SET `Title` = CASE `Id` WHEN 1 THEN @p_0 WHEN 2 THEN @p_1 WHEN 3 THEN @p_2 WHEN 4 THEN @p_3 WHEN 5 THEN @p_4 WHEN 6 THEN @p_5 WHEN 7 THEN @p_6 WHEN 8 THEN @p_7 WHEN 9 THEN @p_8 WHEN 10 THEN @p_9 END //WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10)) fsql.Update() .SetSource(items) .Set(a => a.CreateTime, DateTime.Now) .ExecuteAffrows(); -//UPDATE `Topic` SET `CreateTime` = ?p_0 +//UPDATE `Topic` SET `CreateTime` = @p_0 //WHERE (`Id` IN (1,2,3,4,5,6,7,8,9,10)) ``` @@ -161,10 +161,10 @@ fsql.Update() ```csharp fsql.Update() - .SetRaw("Title = ?title", new { title = "新标题" }) - .Where("Id = ?id", 1) + .SetRaw("Title = @title", new { title = "新标题" }) + .Where("Id = @id", 1) .ExecuteAffrows(); -//UPDATE `Topic` SET Title = ?title WHERE (Id = ?id) +//UPDATE `Topic` SET Title = @title WHERE (Id = @id) ``` ## 5、根据 Dto 更新 @@ -174,7 +174,7 @@ fsql.Update() .SetDto(new { title = "xxx", clicks = 2 }) .Where(a => a.Id == 1) .ExecuteAffrows(); -//UPDATE `Topic` SET `Title` = ?p_0, `Clicks` = ?p_1 WHERE (Id = 1) +//UPDATE `Topic` SET `Title` = @p_0, `Clicks` = @p_1 WHERE (Id = 1) fsql.Update() .SetDto(new Dictionary { ["title"] = "xxx", ["clicks"] = 2 }) @@ -258,9 +258,9 @@ UPDATE `T1` SET Title = '111' WHERE id in (select a.id from T1 a left join Optio | Set | \ | Lambda, value | 设置列的新值,Set(a => a.Name, "newvalue") | | Set | \ | Lambda | 设置列的的新值为基础上增加,Set(a => a.Clicks + 1),相当于 clicks=clicks+1 | | SetDto | \ | object | 根据 dto 更新的方法 | -| SetRaw | \ | string, parms | 设置值,自定义SQL语法,SetRaw("title = ?title", new { title = "newtitle" }) | +| SetRaw | \ | string, parms | 设置值,自定义SQL语法,SetRaw("title = @title", new { title = "newtitle" }) | | Where | \ | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | | Where | \ | T1 \| IEnumerable\ | 传入实体或集合,将其主键作为条件 | | WhereExists | \ | ISelect | 子查询是否存在 | | CommandTimeout | \ | int | 命令超时设置(秒) | diff --git a/分组聚合查询.md b/分组聚合查询.md index 8d992db..648cfe4 100644 --- a/分组聚合查询.md +++ b/分组聚合查询.md @@ -45,8 +45,8 @@ var list = fsql.Select() | Avg | T | Lambda | 指定一个列求平均值 | | 【分组】 | | GroupBy | \ | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) | -| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) | -| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) | +| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) | +| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) | | 【成员】 | | Key | | | 返回 GroupBy 选择的对象 | | Value | | | 返回主表 或 From\ 的字段选择器 | diff --git a/删除.md b/删除.md index 81d4a04..b208a95 100644 --- a/删除.md +++ b/删除.md @@ -51,8 +51,8 @@ var t4 = fsql.Delete(new { id = 1 }).ToSql(); var t5 = fsql.Delete().Where(a => a.Id == 1).ToSql(); //DELETE FROM `Topic` WHERE (`Id` = 1) -var t6 = fsql.Delete().Where("id = ?id", new { id = 1 }).ToSql(); -//DELETE FROM `Topic` WHERE (id = ?id) +var t6 = fsql.Delete().Where("id = @id", new { id = 1 }).ToSql(); +//DELETE FROM `Topic` WHERE (id = @id) var item = new Topic { Id = 1, Title = "newtitle" }; var t7 = fsql.Delete().Where(item).ToSql(); @@ -96,7 +96,7 @@ DELETE FROM `T1` WHERE id in (select a.id from T1 a left join Options b on b.t1i | 方法 | 返回值 | 参数 | 描述 | | - | - | - | - | | Where | \ | Lambda | 表达式条件,仅支持实体基础成员(不包含导航对象) | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | | Where | \ | T1 \| IEnumerable\ | 传入实体或集合,将其主键作为条件 | | WhereExists | \ | ISelect | 子查询是否存在 | | CommandTimeout | \ | int | 命令超时设置(秒) | diff --git a/单表查询.md b/单表查询.md index 845cd9c..b356a6b 100644 --- a/单表查询.md +++ b/单表查询.md @@ -41,11 +41,11 @@ fsql.Select() ## WithSql ```csharp fsql.Select() - .WithSql("select * from Topic where clicks > ?val", new { val = 10 }) + .WithSql("select * from Topic where clicks > @val", new { val = 10 }) .Page(1, 10) .ToList() //SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime` -//FROM (select * from Topic where clicks > ?val) a +//FROM (select * from Topic where clicks > @val) a ``` > WithSql 使用多次为 UNION ALL 查询 diff --git a/多表查询.md b/多表查询.md index f4bffe1..953973e 100644 --- a/多表查询.md +++ b/多表查询.md @@ -77,8 +77,8 @@ fsql.Select() ```csharp fsql.Select() .WithSql( - "select * from Topic where id=?id1", - "select * from Category where id=?id2", + "select * from Topic where id=@id1", + "select * from Category where id=@id2", null, //不设置 CategoryType 对应的 SQL new { id1 = 10, id2 = 11, id3 = 13 } ) @@ -86,19 +86,19 @@ fsql.Select() .LeftJoin((a,b,c) => b.ParentId == c.Id) .ToList(); //SELECT ... -//FROM ( select * from Topic where id=?id1 ) a -//LEFT JOIN ( select * from Category where id=?id2 ) b ON a.`CategoryId` = b.`Id` +//FROM ( select * from Topic where id=@id1 ) a +//LEFT JOIN ( select * from Category where id=@id2 ) b ON a.`CategoryId` = b.`Id` //LEFT JOIN `CategoryType` c ON b.`ParentId` = c.`Id` ``` ## 4、SQL联表 ```csharp fsql.Select() - .LeftJoin("Category b on b.Id = a.CategoryId and b.Name = ?bname", new { bname = "xxx" }) + .LeftJoin("Category b on b.Id = a.CategoryId and b.Name = @bname", new { bname = "xxx" }) .ToList(); //SELECT a.`Id`, a.`Title`, a.`Clicks`, a.`CreateTime`, a.`CategoryId` //FROM `Topic` a -//LEFT JOIN Category b on b.Id = a.CategoryId and b.Name = ?bname +//LEFT JOIN Category b on b.Id = a.CategoryId and b.Name = @bname ``` 延伸问题:SQL联表 b 表的字段如何在 ToList 中指定? diff --git a/查询.md b/查询.md index 80fd936..db70b00 100644 --- a/查询.md +++ b/查询.md @@ -98,27 +98,27 @@ fsql.Select().WhereDynamicFilter(dyfilter).ToList(); | 【条件】 | | Where | \ | Lambda | 支持多表查询表达式,多次使用相当于AND | | WhereIf | \ | bool, Lambda | 支持多表查询表达式 | -| Where | \ | string, parms | 原生sql语法条件,Where("id = ?id", new { id = 1 }) | -| WhereIf | \ | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = ?id", new { id = 1 }) | +| Where | \ | string, parms | 原生sql语法条件,Where("id = @id", new { id = 1 }) | +| WhereIf | \ | bool, string, parms | 原生sql语法条件,WhereIf(true, "id = @id", new { id = 1 }) | | WhereCascade | \ | Lambda | 实现多表查询时,向每个表中附加条件 | | WhereDynamicFilter | \ | DynamicFilterInfo | 动态过滤条件(与前端交互) | | 【分组】 | | GroupBy | \ | Lambda | 按选择的列分组,GroupBy(a => a.Name) | GroupBy(a => new{a.Name,a.Time}) | -| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, ?cc)", new { cc = 1 }) | -| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = ?cc", new { cc = 1 }) | +| GroupBy | \ | string, parms | 按原生sql语法分组,GroupBy("concat(name, @cc)", new { cc = 1 }) | +| Having | \ | string, parms | 按原生sql语法聚合条件过滤,Having("count(name) = @cc", new { cc = 1 }) | | Disdinct | \ | | .Distinct().ToList(x => x.GroupName) 是对指定字段 | | 【排序】 | | OrderBy | \ | Lambda | 按列排序,OrderBy(a => a.Time),可多次使用 | | OrderByDescending | \ | Lambda | 按列倒向排序,OrderByDescending(a => a.Time) | -| OrderBy | \ | string, parms | 按原生sql语法排序,OrderBy("count(name) + ?cc", new { cc = 1 }) | +| OrderBy | \ | string, parms | 按原生sql语法排序,OrderBy("count(name) + @cc", new { cc = 1 }) | | OrderByPropertyName | string, bool | 按属性名字符串排序(支持导航属性) | | 【联表】 | | LeftJoin | \ | Lambda | 左联查询,可使用导航属性,或指定关联的实体类型 | | InnerJoin | \ | Lambda | 联接查询,可使用导航属性,或指定关联的实体类型 | | RightJoin | \ | Lambda | 右联查询,可使用导航属性,或指定关联的实体类型 | -| LeftJoin | \ | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | -| InnerJoin | \ | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | -| RightJoin | \ | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > ?clicks", new { clicks = 1 }) | +| LeftJoin | \ | string, parms | 左联查询,使用原生sql语法,LeftJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | +| InnerJoin | \ | string, parms | 联接查询,使用原生sql语法,InnerJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | +| RightJoin | \ | string, parms | 右联查询,使用原生sql语法,RightJoin("type b on b.id = a.id and b.clicks > @clicks", new { clicks = 1 }) | | From | \ | Lambda | 多表查询,3个表以上使用非常方便,目前设计最大支持10个表 | | 【其他】 | | As | \ | string alias = "a" | 指定别名 | diff --git a/添加.md b/添加.md index daea55b..ef16ab8 100644 --- a/添加.md +++ b/添加.md @@ -26,7 +26,7 @@ for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitl ```csharp var t1 = fsql.Insert(items.First()).ExecuteAffrows(); //INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`) -//VALUES(?Clicks0, ?Title0, ?CreateTime0) +//VALUES(@Clicks0, @Title0, @CreateTime0) ``` 如果表有自增列,插入数据后应该要返回 id。 @@ -49,11 +49,11 @@ repo.Insert(blog); ```csharp var t2 = fsql.Insert(items).ExecuteAffrows(); //INSERT INTO `Topic`(`Clicks`, `Title`, `CreateTime`) -//VALUES(?Clicks0, ?Title0, ?CreateTime0), (?Clicks1, ?Title1, ?CreateTime1), -//(?Clicks2, ?Title2, ?CreateTime2), (?Clicks3, ?Title3, ?CreateTime3), -//(?Clicks4, ?Title4, ?CreateTime4), (?Clicks5, ?Title5, ?CreateTime5), -//(?Clicks6, ?Title6, ?CreateTime6), (?Clicks7, ?Title7, ?CreateTime7), -//(?Clicks8, ?Title8, ?CreateTime8), (?Clicks9, ?Title9, ?CreateTime9) +//VALUES(@Clicks0, @Title0, @CreateTime0), (@Clicks1, @Title1, @CreateTime1), +//(@Clicks2, @Title2, @CreateTime2), (@Clicks3, @Title3, @CreateTime3), +//(@Clicks4, @Title4, @CreateTime4), (@Clicks5, @Title5, @CreateTime5), +//(@Clicks6, @Title6, @CreateTime6), (@Clicks7, @Title7, @CreateTime7), +//(@Clicks8, @Title8, @CreateTime8), (@Clicks9, @Title9, @CreateTime9) ``` > 解决了 SqlServer 批量添加容易导致的错误:传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。 @@ -112,15 +112,15 @@ Bulk Copy 操作以扩展方法的形式实现,针对 SqlServer/PostgreSQL/MyS ```csharp var t3 = fsql.Insert(items).InsertColumns(a => a.Title).ExecuteAffrows(); //INSERT INTO `Topic`(`Title`) -//VALUES(?Title0), (?Title1), (?Title2), (?Title3), (?Title4), -//(?Title5), (?Title6), (?Title7), (?Title8), (?Title9) +//VALUES(@Title0), (@Title1), (@Title2), (@Title3), (@Title4), +//(@Title5), (@Title6), (@Title7), (@Title8), (@Title9) var t4 = fsql.Insert(items).InsertColumns(a =>new { a.Title, a.Clicks }).ExecuteAffrows(); //INSERT INTO `Topic`(`Clicks`, `Title`) -//VALUES(?Clicks0, ?Title0), (?Clicks1, ?Title1), (?Clicks2, ?Title2), -//(?Clicks3, ?Title3), (?Clicks4, ?Title4), (?Clicks5, ?Title5), -//(?Clicks6, ?Title6), (?Clicks7, ?Title7), (?Clicks8, ?Title8), -//(?Clicks9, ?Title9) +//VALUES(@Clicks0, @Title0), (@Clicks1, @Title1), (@Clicks2, @Title2), +//(@Clicks3, @Title3), (@Clicks4, @Title4), (@Clicks5, @Title5), +//(@Clicks6, @Title6), (@Clicks7, @Title7), (@Clicks8, @Title8), +//(@Clicks9, @Title9) ``` ## 5、忽略列 @@ -128,15 +128,15 @@ var t4 = fsql.Insert(items).InsertColumns(a =>new { a.Title, a.Clicks }).Execute ```csharp var t5 = fsql.Insert(items).IgnoreColumns(a => a.CreateTime).ExecuteAffrows(); //INSERT INTO `Topic`(`Clicks`, `Title`) -//VALUES(?Clicks0, ?Title0), (?Clicks1, ?Title1), (?Clicks2, ?Title2), -//(?Clicks3, ?Title3), (?Clicks4, ?Title4), (?Clicks5, ?Title5), -//(?Clicks6, ?Title6), (?Clicks7, ?Title7), (?Clicks8, ?Title8), -//(?Clicks9, ?Title9) +//VALUES(@Clicks0, @Title0), (@Clicks1, @Title1), (@Clicks2, @Title2), +//(@Clicks3, @Title3), (@Clicks4, @Title4), (@Clicks5, @Title5), +//(@Clicks6, @Title6), (@Clicks7, @Title7), (@Clicks8, @Title8), +//(@Clicks9, @Title9) var t6 = fsql.Insert(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ExecuteAffrows(); ///INSERT INTO `Topic`(`Clicks`) -//VALUES(?Clicks0), (?Clicks1), (?Clicks2), (?Clicks3), (?Clicks4), -//(?Clicks5), (?Clicks6), (?Clicks7), (?Clicks8), (?Clicks9) +//VALUES(@Clicks0), (@Clicks1), (@Clicks2), (@Clicks3), (@Clicks4), +//(@Clicks5), (@Clicks6), (@Clicks7), (@Clicks8), (@Clicks9) ``` ## 6、列插入优先级 @@ -176,8 +176,8 @@ limit 10 ```csharp fsql.Insert().MySqlIgnoreInto().AppendData(items).ExecuteAffrows(); ///INSERT IGNORE INTO `Topic`(`Clicks`) -//VALUES(?Clicks0), (?Clicks1), (?Clicks2), (?Clicks3), (?Clicks4), -//(?Clicks5), (?Clicks6), (?Clicks7), (?Clicks8), (?Clicks9) +//VALUES(@Clicks0), (@Clicks1), (@Clicks2), (@Clicks3), (@Clicks4), +//(@Clicks5), (@Clicks6), (@Clicks7), (@Clicks8), (@Clicks9) ``` ## 9、MySql 特有功能 On Duplicate Key Update diff --git a/表达式函数.md b/表达式函数.md index 7b65614..cb9c4ba 100644 --- a/表达式函数.md +++ b/表达式函数.md @@ -157,7 +157,7 @@ var fsql = new FreeSqlBuilder() //请务必定义成 Singleton 单例模式 var id = 1; fsql.Select().Where(a => a.Id == id).ToList(); -//SELECT .. FROM `Song` a WHERE `Id` = ?exp_0 +//SELECT .. FROM `Song` a WHERE `Id` = @exp_0 ``` 生成的参数对象,DbType、Size、Precision、Scale 值设置默认已作优化,与实体属性定义一致。 diff --git a/返回数据.md b/返回数据.md index 74dc42b..8adb63d 100644 --- a/返回数据.md +++ b/返回数据.md @@ -91,11 +91,11 @@ List t13 = fsql.Ado.Query("select * from song"); ## 9、WithSql ```csharp fsql.Select() - .WithSql("select * from Topic where clicks > ?val", new { val = 10 }) + .WithSql("select * from Topic where clicks > @val", new { val = 10 }) .Page(1, 10) .ToList() //SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime` -//FROM (select * from Topic where clicks > ?val) a +//FROM (select * from Topic where clicks > @val) a ``` > WithSql 使用多次为 UNION ALL 查询 diff --git a/骚操作.md b/骚操作.md index cc359ba..364116e 100644 --- a/骚操作.md +++ b/骚操作.md @@ -15,7 +15,7 @@ FreeSql CodeFirst 支持将 c# 代码内的注释,迁移至数据库的备注 这个方法可以设置不使用 参数化 执行 SQL 命令,方便开发调试。 ```sql -INSERT INTO `tb_topic`(`Title`) VALUES(?Title0) +INSERT INTO `tb_topic`(`Title`) VALUES(@Title0) INSERT INTO `tb_topic`(`Title`) VALUES('Title_1') ``` @@ -40,11 +40,11 @@ repo.InsertOrUpdate(实体); # 4、WithSql ```csharp fsql.Select() - .WithSql("select * from Topic where clicks > ?val", new { val = 10 }) + .WithSql("select * from Topic where clicks > @val", new { val = 10 }) .Page(1, 10) .ToList() //SELECT a.`Id`, a.`Clicks`, a.`CategoryId`, a.`Title`, a.`CreateTime` -//FROM (select * from Topic where clicks > ?val) a +//FROM (select * from Topic where clicks > @val) a ``` > WithSql 使用多次为 UNION ALL 查询