2016-05-06 31 views
0

在3層架構(C#,ADO.NET)中,數據集和數據表是將數據從數據層返回到表示層的唯一選項。我一直在與數據表,但是當我將ttry做到這一點數據集/數據表是返回數據的唯一方法嗎?

public User getUserByP(User user) 
    { 
     User t = new User(); 
     using(SqlConnection con = new SqlConnection(Conexion.Cn)) 
     { 
      con.Open(); 
      SqlCommand command = new SqlCommand("spLogIn_User", con); 
      command.CommandType = CommandType.StoredProcedure; 
      command.Parameters.AddWithValue("@user", User.user); 
      command.Parameters.AddWithValue("@password", User.Pass); 
      SqlDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       t.IdUser = reader.GetInt32(0); 
       t.Name = reader.GetString(1); 
       t.LastName = reader.GetString(2); 
       t.Access = reader.GetString(3); 
       t.user = reader.GetString(4); 
       t.Pass = reader.GetString(5); 
      } 
     } 
     return t; 
    } 

我生病有一個錯誤的原因有數據層和表現層之間沒有溝通。這在MVC中是可行的(我認爲),但在這裏沒有。所以如果只想要返回1個結果,datatble或dataset只是選項?

+0

沒有,他們當然不是唯一的選擇。還有很多其他的像Linq-To-Sql,Linq-To-Entities,Dapper.Net,手動填充自定義類等.pp –

+0

你的問題與DataSet' /'DataTable'有什麼關係?你沒有使用一個。什麼是確切的錯誤,它是什麼信息,它在哪裏產生? –

+0

這是一個例子,如果我想從數據層返回一個obejct到我的表示層,它不會wok因爲我不能在我的表示層中有實體,除非我從de演示文稿dll到de數據dll的參考。 –

回答

1

不可以。還有其他方法可以將數據從數據庫檢索到數據層。

  • 的LINQ to SQL
  • 實體框架
  • NHibernate的
  • Dapper.Net

如果在另一方面,你想知道如何從表示層訪問數據層沒有額外的依賴關係,您可以執行以下操作。

  1. 在數據層,總是返回一個專門類型(數據表/數據集),以避免不必要的依賴於System.Data這或其他DLL

  2. 添加業務層的一個簡單的對象來代替。在3層應用程序中,此層使用來自數據層的數據並添加驗證,業務規則和邏輯來訪問和操作數據。

  3. 引用表示層中的業務層以顯示所需的信息。

有關如何實現3層/層體系結構的更多詳情,請參閱this explanation

+0

我在想(關於第2點),但它不違反三層規則?正如我在MVC中所說的,我們可以在實體中引用實體,但在這裏可能呢? –

+1

我已經更新了我的答案。請再檢查一次。基本上,在表示層中引用業務層沒有問題,這就是3層/層架構的定義。有關更多詳細信息,請查看此鏈接http://stackoverflow.com/a/13786596/2332687 – RaulMonteroC