2013-10-09 2 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, это мощный open source ORM –

ответ

3

Делайте самостоятельно одолжение и научиться использовать ОРМ какой-то, для очень легкий и простой в использовании один, я рекомендую щеголеватый, и вы можете сделать что-то вроде этого:

 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 framework (и другие) будет делать это, но с большим объемом служебных данных (и более сложно продемонстрировать в 10-строчном фрагменте кода). –

+0

+1 Приятный дом на полпути. – user2586804

1

Если вы хотите, не выходя за рамки ОРМ/Entity, просто вы можете сделать это с 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(); 
} 
Смежные вопросы