2013-10-09 130 views
0

我的第二天与Visual C#(经过多年的PHP),我试图访问一个SQL数据库。如何访问数据库

我有“记录”类

public class Class1 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public decimal Price { get; set; } 
} 

这个类的一个实例,或者这个类的实例数组,我想,以填补从数据库Database1.sdf,表的productTable数据:

Id int Primary 
Name nvarchar 100 
Category nvarchar 100 
Price money 

所以我做了

SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM ProductTable WHERE id=4"); 
cmd.Connection = conn; 
Class1 row = cmd. 

而且我根本不知道如何着手。与

SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM ProductTable"); 
cmd.Connection = conn; 
Class1[] rows = cmd. 

哪个是从数据库中获取数据对象的首选方法?

+1

的首选方法是使用ORM如NHibernate的http://nhforge.org/(像在PHP学说) 。您的方法主要适用于示例项目。 – empi

+3

或者使用LINQ to Entities或LINQ to SQL ... –

+0

使用Entity Framework,它是一个功能强大的开源ORM –

回答

3

做你自己一个忙,学习使用某种类型的ORM,一个真正重量轻,易于使用的一个,我建议小巧玲珑,你可以做这样的事情:

 using (var sqlConnSource = new SqlConnection(SqlSource)) 
     { 
      sqlConnSource.Open(); 
      var myProducts = sqlConnSource.Query<Class1>("SELECT * FROM Products").ToList(); 
      foreach (var p in myProducts) 
      { 
       //do something more useful here if you want 
       Console.Writeline("The product name is:" + p.Name) 

      } 
     } 
+0

必须有一个更好的语法,你不需要输入一些SQL字符串。这不是它的一半。 – user2586804

+0

是的,但用精巧的方式就是这么做的,这就是为什么它很轻便,您可以在'金属之上'运行,可以这么说。如果你想要更多的抽象,Entity框架(和其他)会做到这一点,但是会有更多的开销(并且更难以在10行代码中演示)。 –

+0

+1那么好的一半的房子。 – user2586804

1

如果你想让它不打算对ORM /实体框架,只需你可以用C#做​​,

using (SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM ProductTable WHERE [email protected]", conn)) 
{ 
    //read search value from from text field 
    cmd.Parameters.AddWithValue("@val",<whateverthevalue>); 
    conn.Open(); 

    SqlCeDataReader reader = cmd.ExecuteReader(); 
    if(reader.Read()) //use while if you want to get multiple records 
    { 
    Class1Obj.id= reader.GetString(0); 
    Calss1Obj.Name= reader.GetString(1); 
    ..... 
     } 

    conn.Close(); 
}