2016-05-06 8 views
0

3層アーキテクチャ(C#、ADO.NET)では、データセットとデータテーブルだけがデータレイヤからプレゼンテーションレイヤにデータを返すかどうかですか?私は、DataTableのに取り組んできましたが、私はこのデータセット/データテーブルはデータを返す唯一の方法ですか?

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; 
    } 

を行うためにttryますとき、私は病気のデータ層とプレゼンテーション層との間に通信がないエラーの原因を持っています。これはMVC(私は思う)でポーズが取れますが、ここではありません。だから1つだけの結果を返すだけの場合、データセットやデータセットはオプションになりますか?

+0

を参照してください。 Linq-To-Sql、Linq-To-Entities、Dapper.Net、カスタムクラスなどを手動で埋めているようなものがたくさんあります。 –

+0

質問はどのように 'DataSet' /' DataTable'に関係していますか?あなたは1つを使用していません。正確なエラーとは何ですか?メッセージです。どこで発生しますか? –

+0

これは例です。データレイヤーからプレゼンテーションレイヤーにオブジェクトを戻したい場合は、プレゼンテーションレイヤーにEntityがありません。なぜなら、プレゼンテーションレイヤーからデータdllへの参照を作成しない限りです。 –

答えて

1

いいえデータベースからデータをデータレイヤーに取り出す他の方法があります。

  • 一方で、あなたはプレゼンテーション層からデータ層にアクセスする方法を知りたい場合はLINQのは
  • Entity Frameworkの
  • NHibernateは
  • Dapper.Net

をSQLへ追加の依存関係がなければ、次のことができます。データ層で

  1. 、常にビジネスレイヤを追加します。単純なオブジェクトの代わりに、特殊なタイプ(データテーブル/データセット)System.Dataのために不必要な依存関係を避けるために、または他のDLL

  2. を返します。 3層アプリケーションでは、このレイヤーはデータレイヤーからのデータを使用し、そのデータにアクセスして操作するための検証、ビジネスルール、ロジックを追加します。

  3. プレゼンテーションレイヤのビジネスレイヤを参照して、必要な情報を表示します。 3層/層アーキテクチャを実現する方法の詳細については

いや、もちろん、彼らが唯一の選択肢ではありませんthis explanation

+0

私は(ポイント2について)考えていましたが、それは3層ルールに違反していませんか?私がMVCで述べたように、私たちのビューでエンティティの参照を持つことはできますが、ここで可能ですか? –

+1

私は自分の答えを更新しました。再度確認してください。基本的に、プレゼンテーションレイヤー内のビジネスレイヤーを参照するのに問題はありません。それは3レイヤー/ティアアーキテクチャーの定義方法です。詳細については、このリンクを参照してください。http://stackoverflow.com/a/13786596/2332687 – RaulMonteroC

関連する問題