1

我正在编写一个可以连接到任何 SQL Server 数据库的应用程序,因此可以被视为独立的。换句话说,应用程序做的第一件事就是请求一个连接字符串。此应用程序将对数据库执行查询和其他任务,因此需要 SQL 语句。

因此,由于我不打算用预定义的数据库专门为应用程序分配属性,我如何从我的 C# 应用程序执行 SQL 语句?我想存储过程是不可能的,因为应用程序可以连接到任何数据库。

我可以轻松地在应用程序本身中对 SQL 语句进行硬编码,但我想知道在这种情况下最佳实践方法是什么。是否可以在应用程序中嵌入 SQL 语句,从而本质上在同一个应用程序中拥有业务逻辑和数据层?我对此没有逻辑或技术问题,只是想知道这是否是一种有效的方法,或者是否会被经验丰富的开发人员所反对?

我听说过实体框架,但老实说,我不确定它的作用或它是否有效。到目前为止,我所有的数据驱动应用程序都使用了存储过程,这是我第一次编写可以与运行时指定的数据库一起使用的应用程序。

谢谢!

4

3 回答 3

0

是的,将 SQL 查询嵌入到应用程序中是可以接受的。您可以使用资源文件,而不是在代码中硬编码它们。连接字符串提供程序名称应该使您能够为要连接的数据库选择正确的 SQL 方言。

请参阅使用类似方法的事件存储 SQL 持久性工厂ResolveDialect 方法。它也使用它来确定创建和调用存储过程所需的语法,而您的应用程序将(我假设)需要调用返回数据库元数据/结构的 SQL。虽然他们将调用的 SQL 不同,但这种模式应该非常适合您的应用程序,允许您支持许多不同的数据库。

根据您尝试实现的目标,您可能还需要创建一个表示数据库中的表、列等元数据的内部模型。

[编辑]

抱歉刚刚看到关于仅作为 SQL 服务器的评论。因此,客户端可以更多地使用 SQL 方言来确定 SQL 查询的结构(例如 For code complete )。

于 2012-09-08T10:38:14.740 回答
0

由于您正在构建查询构建器(没有双关语),因此您需要查询数据库目录,这对于同一种 DBMS 下的所有数据库都是相同的。这将允许您获取任何给定数据库中的和其他对象的列表,以便您可以将它们呈现给用户。

您将使用纯 ADO.NET 还是 ORM 是一个正交问题。

于 2012-09-08T10:46:32.193 回答
-2

如果您在 .Net 中进行开发,则应考虑使用Microsoft 企业库

它提供了有关构建可扩展应用程序的全面详细信息。

编辑:

您必须考虑处理不同的驱动程序来处理不同的数据库引擎。可能无法在所有数据库上运行相同的查询,因为它们通常遵循不同风格的 sql。例如,mssql 使用 TSql,而 Oracle 使用 PL-Sql。

另一种解决方案是遵循 Ansi sql 标准。

于 2012-09-08T10:11:27.307 回答