2011-10-24 9 views
0

文字列値のみを返すリターン関数の例です。単純に1つの関数を呼び出すだけで、1つのレコードに異なるデータ型からなる複数の値を返すにはどうすればよいですか?oledbレコード全体を取得して.accdbから返す

public static string selectPassword(string user) 
    { 
     using (var connection = new OleDbConnection(connectionString)) 
     using (var command = connection.CreateCommand()) 
     { 
      command.Parameters.AddWithValue("@user", user); 
      command.CommandText = "SELECT [Password] FROM [Password_Table] WHERE Password_ID = [@user]"; 
      command.CommandType = CommandType.Text; 

      connection.Open(); 

      var value = command.ExecuteScalar(); 

      return value == DBNull.Value ? null : value.ToString(); 
     } 
    } 

私の記録はParticipant_Nameで検索されるだろう、とParticipant_Name、Participant_ID、住所、Contact_Number &性別フィールド、すべての文字列からなる、整数などを返却する必要があるでしょう。..

答えて

2

がどのデータ型を作成します。取得したい情報を保持できるフィールドとプロパティで構成されています。

メソッド内にその型のインスタンスを作成して返します。例えば、このような

何か、:

public class Participant 
{ 
    public int Id { get; private set; } 
    public string Name {get; set;} 
    public string Address {get; set; } 


    public Participant(int id, string name, string address) 
    { 
     this.Id = id; 
     this.Name = name; 
     this.Address = address; 
    } 
} 

public Participant GetParticipant(string name) 
{ 
    using(var conn = new OleDbConnection (connectionString)) 
    { 
     using(var cmd = connection.CreateCommand()) 
     { 
       command.CommandText = "SELECT [Id], [Name], [Address] FROM Participant WHERE [name] LIKE @p_name"; 


       command.Parameters.Add ("@p_name", OleDbType.VarChar).Value = name + "%"; 

       using(var reader = command.ExecuteReader()) 
       { 
        if(!reader.HasRows()) return null; 

        reader.Read(); 

        return new Participant (reader.GetString("Id"), reader.GetString("name"), reader.GetString("address")); 
       } 
     } 
    } 

} 

注:そこに私は、コンパイラによってそれを引っ張っていないので、構文エラーがあることが、私はあなたがドリフトをキャッチすると思うことができます。

、あなたが上記のあなたの方法に変更する必要があるもの DataRow

.ItemArrayを呼び出すことによって取得することができますDataRowオブジェクトまたはオブジェクトの配列がDataAdapterを使用し、そのFillメソッドを呼び出すことで返さなければなりませんあなたのニーズに

+0

これは素晴らしいです。エンティティが定義されている場合は、これが最適です。また、DataRowまたはitemArrayを直接返すこともできます。私の答えは心が薄いと書いていたので、あなたのために+1しました。実際のアプリケーションでは、常にあらゆる種類のレコードのビジネスエンティティが存在する必要があります。 –

+0

私はそれを逃したに違いない!そのワウ・ソリューションは、それがシンプルでありながらエレガントなソリューションであることを知らなかった!私は他の答えが間違っていると言っているわけではありませんが、これは私が現在知っているものについて私に最も訴えます!みんな、ありがとう! – user776914

1

DataTableを塗りつぶして、その行が存在する場合はそのDataTableの最初の行を返します。

DataReaderでこれを行うこともできますが、次に配列やオブジェクトのコンテナを自分で返すように構築する必要があります。私はdataRow.ItemArrayの方がコードが高速だと思います。

+0

はコードが速いが、単純なデータローがタイプされていないので、使用するのが面倒ではない。 –

関連する問題