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

时间:2010-10-21 16:20:43

标签: c# .net sql-server ado.net

我是.NET的新手,并且已经了解了几种不同的查询SQL Server数据库的方法,例如ADO.NET和实体框架。

有人可以给我一些关于新应用程序的最佳方法的建议吗?

感谢您提供任何帮助或建议。

5 个答案:

答案 0 :(得分:10)

以下是使用EF从数据库生成代码的示例(对于您可能希望从代码生成数据库的真实应用程序):

  1. 右键点击您的项目>>添加>>新商品>> ADO.NET实体数据模型。
  2. 为您的实体选择一个名称,即MyEntities.edmx,然后单击“下一步”
  3. 选择“从数据库生成”
  4. 如果还没有“新连接”,请配置它。下一步。
  5. 选择要包含在实体中的表,视图和SPROC。完成。
  6. 您将看到一个文件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>
    

答案 1 :(得分:2)

NHibernate是要走的路。有关详细信息,请参阅http://nhforge.orghttp://sf.net/projects/nhibernate

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

答案 2 :(得分:2)

Entity Framework是最简单的,内置它。

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

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

答案 3 :(得分:2)

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;

答案 4 :(得分:2)

在我看来,最好的解决方案是在db和应用程序(某种类型的数据层)之间创建中间类,其中有许多方法用于管理查询。 下面的描述基于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集中在一个地方,程序员使用它是非常愉快的 - 这是我的建议。