2013-10-09 39 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(); 
}