2017-01-16 43 views
0

早上好,MVC從SQL數據庫多個結果無法正常工作

我一直在學習MVC .NET週末,我想從一個數據庫中的數據,但結果不會顯示:

我使用下面的代碼:

public class ListClientsController : Controller 
{ 
    private string QueryString; 
    private string myConnectionString; 
    public List<ListClients> models = new List<ListClients>(); 

    public ActionResult Index() 
    { 
     bool iterate = true; 
     string iname = ""; 
     string isurname = ""; 
     int iIDNO = 0; 

     QueryString = "select FirstName, Surname, IDNumber from [iDtB].[dbo].[Clients]"; 
     myConnectionString = "Data Source=<name>\\SQLEXPRESS01;Integrated Security=SSPI"; 
     SqlConnection iDtBData = new SqlConnection(myConnectionString); 
     iDtBData.Open(); 
     SqlCommand SQLCMD = new SqlCommand(QueryString, iDtBData); 
     SqlDataReader Reader = SQLCMD.ExecuteReader(); 

     Reader.Read(); 
     while (iterate) 
     { 
      try 
      { 
       iname = Reader["FirstName"].ToString(); 
       isurname = Reader["Surname"].ToString(); 
       int.TryParse(Reader["IDNumber"].ToString(), out iIDNO); 

       models.Add(new ListClients 
       { 
        Name = iname, 
        Surname = isurname, 
        IDNO = iIDNO 
       }); 

       Reader.NextResult(); 
      } 
      catch 
      { 
       iterate = false; 
      } 
     } 
     Reader.Close(); 
     iDtBData.Close(); 

     return View(models); 
    } 
} 

出於某種原因,我得到這樣的結果:

MVC Client results

現在值得注意的是,據我所知,由於字段不匹配,我得到ID號爲「0」,我不明白爲什麼我無法獲得多個結果來顯示。

提前致謝!

回答

1

您實際上沒有讀取從查詢返回的所有結果。 NextResult()返回下一個結果集,而不是下一個記錄。將其替換爲Read(),您應該開始獲取所有結果。

我也會消除Try/Catch循環,因爲這會阻止您看到發生的任何錯誤。另外,Read返回一個真/假,讓你知道它是否讀取了一條記錄,或是不讓它簡單化。

 while (Reader.Read()) 
     { 
      try 
      { 
       iname = Reader["FirstName"].ToString(); 
       isurname = Reader["Surname"].ToString(); 
       int.TryParse(Reader["IDNumber"].ToString(), out iIDNO); 

       models.Add(new ListClients 
       { 
        Name = iname, 
        Surname = isurname, 
        IDNO = iIDNO 
       }); 
     } 

我也建議考慮看看如何使用using語句(https://msdn.microsoft.com/en-us/library/yh598w02.aspx),以提高連接和數據讀取器的處理。

相關問題