2012-11-15 35 views
0

我正在嘗試創建一個如下所示的列表,並使用來自datareader的值更新它。我需要編寫代碼來幫助更新數據讀取器的列表。Datareader和列表

internal IList<FilingDto> LoadStatusDtofromReader(IDataReader reader) 
     { 
      IList<FilingDto> filingstatus = new List<FilingDto>(); 

      while (reader !=null && reader.Read()) 
      { 
       var dto = new FilingDto(); 
       var Year = (Decimal)reader["Year"]; 
       dto = new FilingDto() 
       { 

        Controllerid = (Guid)reader["Collectorid"], 
        Status = DBNull.Value.Equals(reader["Status"]) ? string.Empty : reader["Status"].ToString(), 
        Year = Convert.ToInt32(Year), 
        Level = DBNull.Value.Equals(reader["Level"]) ? string.Empty : reader["ServiceLevel"].ToString() 
       }; 

       filingstatus.Add(dto); 
      } 

      return status; 
     } 

從DataReader按順序讀取的代碼如下,但我請與停留在幫我完成這個

DataTable FilingStatus = new DataTable("FilingStatus"); 
       SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Connectionstring"].ConnectionString); 
       sqlcon.Open(); 
       SqlCommand cmd = new SqlCommand("select Collectorid, Status, Year, Level from dbo.abc", sqlcon); 

       using (IDataReader dr = 
+0

代碼是正確的。但是你應該返回'filingstatus'而不是'地位'。 –

+0

您是否閱讀過Datareader類的文檔和示例? [Msdn文檔](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx)有示例... –

+0

您正在返回未聲明的變量status。請張貼至少有機會編譯的內容。另外,當你想使用'DataReader'時,爲什麼要聲明'DataTable'?看看['SqlCommand.ExecuteReader'](http://msdn.microsoft.com/en-us/library/9kcbe65k.aspx)。 –

回答

1

您應該調用的ExecuteReader SqlCommand對象

SqlCommand cmd = new SqlCommand("select Collectorid, Status, Year, Level from dbo.abc", sqlcon); 
      SqlDataReader reader = cmd.ExecuteReader(); 
      try 
      { 
       while (reader.Read()) 
       { 
        Console.WriteLine(String.Format("{0}, {1}", 
         reader[0], reader[1])); 
       } 
      } 
      finally 
      { 
       // Always call Close when done reading. 
       reader.Close(); 
      } 

我建議使用ORM像實體框架,而不是ADO.NET

+0

我需要將值添加到我的列表中,而不是將其寫入輸出。鋤頭我會這樣做嗎。 – Rash

+0

我需要將此表中的值添加到我的列表中。請幫助我解決這個問題 – Rash

+0

如果您使用「使用」關鍵字(如..「using(SqlDataReader reader = cmd.ExecuteReader()){...}」,則不必顯式調用.Close() –

1

試試這個,

DataTable FilingStatus = new DataTable("FilingStatus"); 
    SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["CentralW2Database"].ConnectionString); 
    sqlcon.Open(); 
    SqlCommand cmd = new SqlCommand("select CollectorGuid, FileStatus,FilingYear, ServiceLevel from dbo.FilingRequestQueue", sqlcon); 

    using (var dr = cmd.ExecuteReader()) 
    { 
     IList<FilingDto> list = LoadStatusDtofromReader(dr); 
    } 

    internal IList<FilingDto> LoadStatusDtofromReader(IDataReader reader) 
    { 
     var filingstatus = new List<FilingDto>(); 

     while (reader != null && reader.Read()) 
     { 
      var dto = new FilingDto 
      { 
       Controllerid = (Guid)reader["Collectorid"], 
       Status = DBNull.Value.Equals(reader["Status"]) ? string.Empty : reader["Status"].ToString(), 
       Year = Convert.ToInt32((Decimal)reader["Year"]), 
       Level = DBNull.Value.Equals(reader["Level"]) ? string.Empty : reader["ServiceLevel"].ToString() 
      }; 

      filingstatus.Add(dto); 
     } 

     return filingstatus; 
    } 
+0

確定我已經瞭解創建列表,但我如何從我的數據讀取器中將值讀入此列表中 SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings [「Connectionstring」] .ConnectionString); sqlcon.Open(); SqlCommand cmd = new SqlCommand(「select Collectorid,Status,Year,Level from dbo.abc」,sqlcon); 使用(IDataReader的DR = – Rash

+0

感謝這個,但現在你可以幫我讀的數據讀取器的值填充列表 的SqlConnection sqlcon =新的SqlConnection(ConfigurationManager.ConnectionStrings [「CentralW2Database」]的ConnectionString); sqlcon 。開(); 的SqlCommand CMD =新的SqlCommand( 「選擇CollectorGuid,時間filestatus,FilingYear,ServiceLevel從dbo.FilingRequestQueue」,sqlcon); IDataReader的DR = cmd.ExecuteReader(); 而(dr.Read() ) { 我被卡住了這一點。如何填充列表 – Rash

+0

正確就像你正在做的那樣。 filingstatus.Add(DTO); – Paparazzi

0

如果可以重新使用原來的功能只是做

using (DataReader dr = cme.ExecuteReader()) 
{ 
    IList<FilingDto> list = LoadStatusDtofromReader(dr); 
}