2016-06-21 1 views
4

dbから組織データを取得しようとしています。私はもう少しデータが必要ですが、私はちょうど組織名と組織アドレスに固執しています。私は、結合を含むクエリを実行しようとしている、私が作成したカスタムクラスのリストであるオブジェクトを作成します。奇妙なことは、whileループのコードにコメントして、orgの名前を取得するだけですが、オブジェクトのリストを作成しようとするとすぐに機能しません。ここでリストに追加するときにSqlDataReaderがすべての行を返さない<MyClass>

は、私は私のクラスで始まる、持っているものです:

namespace FFDFrameWorkPart 
{ 
    public class OrgData 
    { 
     public string orgName { get; set; } 
     public string orgAddress { get; set; } 
    } 
} 

List<OrgData> OrgObject = new List<OrgData>(); 
List<string> orgName = new List<string>(); 
    using (SqlConnection connection = new SqlConnection(connectString)) 
    { 
     connection.Open(); 
     SqlCommand GrabOrgsFromDb = new SqlCommand(getConstitData, connection); 
     SqlDataReader reader = GrabOrgsFromDb.ExecuteReader(); 
     try 
     { 
      while (reader.Read()) 
      { 
       orgName.Add(reader.GetString(0)); 
       OrgObject.Add(new OrgData() 
       { 
        orgName = reader.GetString(0), 
        orgAddress = reader.GetString(1) 
       }); 
      } 
     } 
     catch (Exception ex) 
     { 
      consoleLog.Value = ex.ToString(); 
     } 
     finally 
     { 
      reader.Close(); 
     } 
    } 

はI場合orgName.CountとOrgObject.Countでそのコードの結果が20

の近傍にあることを実行していますただコメントアウトする

OrgObject.Add(new OrgData() 
{ 
    orgName = reader.GetString(0), 
    orgAddress = reader.GetString(1) 
}); 

次に、orgName.Countが約28,000にジャンプします。コードを変更する必要はありません。私のリストを作成しようとしている場所をコメントアウトするだけで、結果から約2万8000件のレコードが失われます。

EDIT:それはフィールドのいずれかにNULL値を押すと、あなたは列が存在しないか、欠損値が含まれているかどうかを確認するためにSqlDataReader.IsDBNullを使用することができ

+0

21行レコードの列1のデータソース内の問題がありますか?それはループを壊します。 – ydoow

+0

ありがとうございました。 – reggieb

答えて

3

を停止しています。

OrgObject.Add(new OrgData() 
{ 
    orgName = reader.IsDBNull(0) ? null : reader.GetString(0) , 
    orgAddress = reader.IsDBNull(1) ? null : reader.GetString(1) 
); 
1

フィールドがNULLで、ハードコーディングされた序数を使用する代わりに、GetOrdinalを使用することをお勧めします。フィールドにフィールドが追加されると、序数が自動的に調整されます。

OrgObject.Add(new OrgData() 
{ 
    orgName = reader.IsDBNull(reader.GetOrdinal("Name")) ? null : reader.GetString(reader.GetOrdinal("Name")) , 
    orgAddress = reader.IsDBNull(reader.GetOrdinal("Address")) ? null : reader.GetString(reader.GetOrdinal("Address")) 
); 

または少しクリーナー

int nameOrd = reader.GetOrdinal("Name"); 
int addressOrd = reader.GetOrdinal("Address"); 

    OrgObject.Add(new OrgData() 
    { 
     orgName = reader.IsDBNull(nameOrd) ? null : reader.GetString(nameOrd) , 
     orgAddress = reader.IsDBNull(addressOrd) ? null : reader.GetString(addressOrd)); 
関連する問題