使用 C# .Net 访问 SQL Server 数据库的最佳方式

Posted

技术标签:

【中文标题】使用 C# .Net 访问 SQL Server 数据库的最佳方式【英文标题】:Best way to access a SQL Server database using C# .Net 【发布时间】:2011-04-28 17:26:02 【问题描述】:

我是 .NET 新手,听说过几种不同的查询 SQL Server 数据库的方法,例如 ADO.NET 和实体框架。

谁能给我一些关于新应用程序的最佳途径的建议?

感谢您的任何帮助或建议。

【问题讨论】:

你有多少编程经验?以前用过数据库吗? 我有一些基本的 C# 知识并且知道 SQL,我只是以前不必在 C# 程序中访问数据库。 这是一个悬而未决的问题。任何好的答案都取决于您想要做什么、您必须使用的时间范围以及您已经熟悉/熟悉的内容。 从您得到的回复中应该很明显,没有“最好的方法”。三个人在不到三分钟的时间内给出了三个不同的答案:) 【参考方案1】:

NHibernate 是要走的路。请参阅http://nhforge.org 和http://sf.net/projects/nhibernate 了解更多信息。

Entity Framework 和 NHibernate 的主要区别在于 Entity Framework 仅适用于 Microsoft SQL Server(Oracle 有点支持,但支持并不理想)。 NHibernate 支持many many many 数据库。

【讨论】:

如果你选择这个选项,也可以考虑使用 Fluent NHibernate。【参考方案2】:

在我看来,最好的解决方案是在数据库和应用程序(某种类型的数据层)之间创建中间类,其中有许多用于管理查询的方法。 下面的描述基于 SQLite 类比 SQLServer(ADO 连接器)

提到的类可以是单例的,你可以在应用程序中的任何地方调用它——对于 SQLite,它看起来像这样:

private static SQLite instance;

public static SQLite getInstance()

   if(instance == null)
   
    instance = new SQLite();
    thread = Thread.CurrentThread.ManagedThreadId;
   
   return instance;

您可以通过这种方式获取实例:

SQLite db = SQLite.getInstance();

该类可以包含多种数据操作方法,例如:

public SQLiteCommand prepareQuery(string sql)

   cmd = new SQLiteCommand(sql, conn);
   return cmd;


public SQLiteDataReader executeReader()
   
    return cmd.ExecuteReader();


public int executeInt()

   object obj = cmd.ExecuteScalar();
   return (int)obj;

还有事务管理和诊断方法。 所以现在 - 如果您有其他数据库源甚至数据库类型,您可以在您的应用程序中使用类似的类,您可以创建下一个数据层(例如 Oracle 或 MSSQL、mysql ......)每个都实现了例如相同的界面:

IDataBase

现在,您有了某种外观,您可以根据需要动态替换它。 从此在应用程序中使用 db 集中在一个地方,程序员使用它是一种纯粹的乐趣——这是我的建议。

【讨论】:

可能更容易使用预先存在的数据库抽象,而不是旋转你自己的抽象,除非 OP 的目标是纯粹的教育。 在这种情况下很难获得与所有订阅者兼容的统一层【参考方案3】:

LINQ to SQL 非常易于使用。您可以将数据库表拖放到设计器中,并在几分钟内编写非常简单的查询。

    NorthwindDataContext db = new NorthwindDataContext();

    var products = from p in db.Products
                   select p;

这基本上会转化为 SELECT * FROM Products

其他一些精选示例:

    var products = from p in db.Products
                   where p.Category.Name == "Beverages"
                   select p;

    var products = from p in db.Products
                   orderby p.Name
                   select p;

【讨论】:

var products = db.Products; 尝试显示 LINQ 语法...有点类似于 SQL 对于一个新项目的通用 ORM 解决方案,我会使用 NHibernate 而不是 Linq-to-sql,但这可能更容易开箱即用。【参考方案4】:

这是一个使用 EF 并从数据库生成代码的示例(对于真正的应用程序,您可能希望从代码生成数据库):

    右键单击您的项目>>添加>>新建项目>>ADO.NET实体数据模型。 为您的实体选择一个名称,即 MyEntities.edmx,单击下一步 选择“从数据库生成” 如果还没有连接,请配置“新连接”。接下来。 选择要包含在实体中的表、视图和 SPROC。完成。

您将看到一个文件 MyEntities.edmx 添加到您的项目中。您可以在设计视图中打开它以查看您的实体和关系的图表。请注意,每个实体都应该有一个主键 - 最简单的方法是向每个表或 GUID 列添加一个 ID - 自动递增字段。无论如何,现在您可以像这样查询您的数据库:

// assuming a "Product" table, which has an entity pluralized to "Products"

MyEntities db = new MyEntities();

var cheapProducts = db.Products.Where(p => p.Price > 30); // var is IEnumerable<Product>

【讨论】:

【参考方案5】:

Entity Framework 是最简单的,并且是内置的。

您所要做的就是重要您的模型,然后只需更新简单的类,这些类会自动映射到您的数据库。

它就像更新普通对象,但最后你调用 SaveChanges。

【讨论】:

如果您正在启动将持续几年的项目,请不要使用 EF。它会用状态信息污染你的域对象。将迫使您使用特定风格的编码... EF 的 VisualStudio 工具是半支持的。对于长期项目,我建议使用 NHibernate。 这样的废话,开箱即用,您可以获得具有状态的实体。但是还有其他非常简单的选择。你最近有看过 EF 吗?让我帮你.. (channel9.msdn.com/Blogs/wriju/…)

以上是关于使用 C# .Net 访问 SQL Server 数据库的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

C# 访问 SQL Server 数据库存储过程和视图

.Net - 访问多个 sql server 组/数据库

如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

使用 C#、SQL Server 设计数据访问层

C#:通过 ADO.NET 在 SQL Server 2008 上运行事务

使用 c# asp.net 获取 XML 数据并插入到 sql server