任何人都知道像Squiggle这样的一些优秀的SQL构建器库(似乎不再维护).优选地,正在积极开发的项目.
最好使用类似Zend_Db_Select的语法,这样可以进行类似的查询
String query = db.select().from('products').order('product_id');
Run Code Online (Sandbox Code Playgroud) 我不是在寻找像Hibernate这样的持久层,我只想生成sql-strings,它们应该兼容PreparedStatement.我已经尝试了像Squiggle这样的库,但它只支持SELECT,我还想生成插入和更新.理想的用法是:
generateInsertOn("myTable").addValue("value1").addValue("value2").generate();
Run Code Online (Sandbox Code Playgroud)
会产生这个字符串:
"INSERT INTO myTable (value1, value2) VALUES(?, ?)"
Run Code Online (Sandbox Code Playgroud)
我知道,有存在很多像我这样的,如题本,但他们不相当问同样的事情,和我一样.
干杯,
我正在寻找一种在C#中编写一个针对不同提供者的SQL语句的方法.SQL语句区分的典型示例是PostgreSQL中的LIMIT与MSSQL中的TOP.
是解决SQL语法的唯一方法,如上面两个,根据用户选择的提供者或使用try catch语句作为流控制来编写if语句(LIMIT不起作用,我会尝试使用TOP)?我已经看过LINQ Take方法,但我想知道如果没有LINQ可以做到这一点吗?
换句话说,C#是否有一些我无法找到的通用SQL Provider类可以使用?
我试图使用SqlBuilder的Where和OrWhere方法来实现Dapper,但它的表现并不像我期望的那样.
这个问题的编辑部分基本上是我遇到的.由于它没有得到答复,我会在这里问.
var builder = new SqlBuilder();
var sql = builder.AddTemplate("select * from table /**where**/ ");
builder.Where("a = @a", new { a = 1 })
.OrWhere("b = @b", new { b = 2 });
Run Code Online (Sandbox Code Playgroud)
我期望 select * from table WHERE a = @a OR b = @b
但我明白了 select * from table WHERE a = @a AND b = @b
有没有办法使用SqlBuilder向where子句添加OR?
我认为只需要在SqlBuilder类中更改以下内容来表示OR而不是AND,但我想确认一下.
public SqlBuilder OrWhere(string sql, dynamic parameters = null)
{
AddClause("where", sql, parameters, " AND ", prefix: "WHERE …Run Code Online (Sandbox Code Playgroud) 这个SqlBuilder:
var builder = new SqlBuilder();
var sql = builder.AddTemplate( /*...
Run Code Online (Sandbox Code Playgroud)
强烈的愚蠢的问题,但是,我该如何使用呢?我知道它在中Dapper.Contrib,但是那using句话还不够。using我需要添加哪些参考或其他陈述?
我找不到任何可以遵循以使用 SqlBuilder 类的文档或示例。
我需要动态生成sql查询,我找到了这个类。这会是最好的选择吗?
我正在使用来自http://openhms.sourceforge.net/sqlbuilder/ 的Java 和 SQLBuilder, 并尝试动态构建 SQL SELECT 查询:
SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like("column1", "A"));
Run Code Online (Sandbox Code Playgroud)
但是,它会创建这样的字符串:
SELECT * FROM table1 WHERE ('column1' LIKE 'A')
Run Code Online (Sandbox Code Playgroud)
由于错误的引号 ( 'column1') 无法正常工作。我想它在.like()方法中需要一些 Column 对象。有没有办法用正确的引号创建查询?
你是否有人知道一个帮助你构建/操作SQL查询的库,它支持JOIN?
如果你有一些可以返回一个对象的东西,它有一些查询集,并且仍然能够将JOIN应用于它,子查询等,那么它会提供很大的灵活性.
我一直在搜索,并且只找到了SQL Builder,它看起来非常基本,并且不支持连接.这将是一个真正使其有用的主要功能.
我正在尝试为多个搜索项构建动态Sql查询.我一般都了解如何使用构建器,但我不知道在循环中该做什么,因为我实际上每次都需要@term不同(我认为).不仅在查询中,而且在匿名类型中也匹配.
我可以在查询字符串中使用string.Format,但不确定如何在匿名类型中匹配它?
public async Task<List<Thing>> Search(params string[] searchTerms)
{
var builder = new SqlBuilder();
var template = builder.AddTemplate("SELECT * /**select**/ from ThingTags /**where**/ ");
for (int i = 0; i < searchTerms.Length; i++)
{
builder.OrWhere("value LIKE @term", new { term = "%" + searchTerms[i] + "%" });
}
...
}
Run Code Online (Sandbox Code Playgroud)
在当前形式中,为术语"abc""def""ghi"创建的查询是
CommandType: Text, CommandText: SELECT * from ThingTags WHERE ( value LIKE @term OR value LIKE @term OR value LIKE @term )
Parameters:
Name: term, Value: %ghi%
Run Code Online (Sandbox Code Playgroud) 我怎样才能更换所有'?' 变量?就像是:
$name = 'test' ;
$lname = 'lastTest';
$id = 1 ;
->where ( 'customers.name = ? and customers.lastname = ? and customers.id = ?' , $name , $lname , $id ) ;
Run Code Online (Sandbox Code Playgroud)
输出:
customers.name = 'test' and customers.lastname = 'lastTest' and customers.id = 1
有任何想法吗?