有没有适用于.Net的动态Sql构建器库?

15

类似这样的东西。

http://code.google.com/p/squiggle-sql/wiki/Tutorial

在需要从用户界面输入构建复杂的 SQL 的情况下,这是必需的。目前我所在的项目正在使用字符串操作,看起来很丑陋,而且难以维护。


在2018年,您可以使用https://sqlkata.com。 - amd
5个回答

11

DbExtensions很容易使用。然而,它有一些基本的设计问题。首先,它没有一个非常想要的INSERT IGNORE INTO函数。其次,它非常死板。当一个人执行INSERT_INTO时,他不能执行INSERT_INTO({0}({1},{2}), tableName, col1, col2),因为这会在参数周围添加单引号。相反,您必须使用重载并基本上硬编码输入字符串。另一个例子是做VALUES,您必须做VALUES(some_string)或者做VALUE({0} = {1}, col1, val1)。话虽如此,它不是一个坏库,但还有很多需要改进的地方。 - Some Newbie
@SomeNewbie 在这里发布你的评论(https://github.com/maxtoroq/DbExtensions/issues),我会帮助你解决问题。 - Max Toro

6

2

据我所知没有(虽然这并不意味着一定没有)。

那么Entity Framework呢?它允许构建查询并将其翻译成针对实体的SQL:

customers.OrderBy(c => c.Name).Skip(10).Take(20) 

生成:
SELECT value c 
FROM NW.Customers AS c 
ORDER BY c.Name skip 10 limit 20; 

1
我正在开发的应用程序是基于 .Net 2.0 的,因此 EF 对我来说不是一个选择。 - Amitabh
你可以使用像NHibernate这样的完整ORM吗?它将为您提供通过其Criteria API构建I查询的能力。 - Michael Shimmins
我们的应用程序中使用了nHibernate 1.2,但由于性能原因,这个特定的功能已经绕过了nHibernate。 - Amitabh

2

Linq-to-Sql有什么问题吗?

var dc = new YourDataContext();
var query = dc.TableName.Where(x=>x.MatchesYourPredicate);
Console.WriteLine(dc.GetCommand(query).CommandText);

我需要的项目是 .Net 2.0 项目。 - Amitabh
1
此外,过滤元素并不总是已知。 - Thea
对我来说,表名只有在运行时才知道。 - Kurren

0

我总是自己构建...这样做快速简便,而且不需要依赖第三方库。此外,它还可以帮助你更加深入地了解SQL。


1
如果你是一名程序员,那么这是正确的。但我可以看到该库被用于驱动一个GUI,使非程序员/数据输入人员能够构建针对数据库的通用查询。他们永远不会能够做到高效,但有时这很有用。 - Dean Harding
你介意分享吗? - SuperManSL
1
这真的那么容易吗?你如何处理子查询?有强类型吗?连接?别名?你能在where子句中分组项目,使OR语句不会使AND语句无效吗?我还可以继续。 - Don Rolling
是的,这很容易 - 而且您可以完全控制正在发生的事情,这可以帮助您更好地理解您采取的方法以及为什么采取该方法。 - Michael Rodrigues

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接