2013-11-28 28 views
0

得到行的標識出了什麼問題請?C#:計數和從SQL

我能得到的記錄數,但不能獲得價值每條記錄的ID

我有這個函數計算並獲得ID值: 我認爲這個問題是在功能

Form1中

public List<int> countInTable(Double codebar) 
     { 
      cmd.Connection = cn; // sqlconn 
      cn.Open(); 
      List<int> id = new List<int>();   
      String countString = "SELECT COUNT (*) FROM medicaments WHERE code_bare = @codebar "; 
      var myCommand = new SqlCommand(countString, cn); 
      myCommand.Parameters.AddWithValue("@codebar", codebar); 
      int count = Convert.ToInt32(myCommand.ExecuteScalar()); 
      id.Add(count); 
      using (rd = myCommand.ExecuteReader()) 
      { 
       // loop over all rows returned by SqlDataReader 
       while (rd.Read()) 
       { 
        // grab the column no. 0 (id" from 
        // SQL select statement) as a string then int, and store it into list of id 
        t0 = rd[0].ToString(); 
        id.Add(int.Parse(t0)); 
       } 
      } 
      rd.Close(); 
      cn.Close(); 
      return id; 
     } 

然後調用第一功能的另一種形式讓每個記錄 窗口2的數據

private void laodProduct(Double codebar) 
     { 
      this.listView2.Items.Clear(); 
      List<int> total = manipBaseDonnees.countInTable(double.Parse(textBox2.Text)); 
      foreach (int t in total) 
      { 
       listBox1.Items.Add(t); 
       List<string> donnees = manipBaseDonnees.getFromTableID(t); 
       var item1 = new ListViewItem(new[] { donnees[1], donnees[2], donnees[6], donnees[7], donnees[8], donnees[4], donnees[0] }, -1, Color.Empty, Color.Yellow, null); 
       this.listView2.Items.AddRange(new ListViewItem[] { item1 }); 
      } 
     } 

回答

1

您的查詢計數查詢時,您不能使用相同的查詢來獲取每個條目。你需要使用一個第二個查詢:

string query = "SELECT * FROM medicaments WHERE code_bare = @codebar"; 

如果你只想要ID字段,則僅包括在查詢:

string query = "SELECT ID FROM medicaments WHERE code_bare = @codebar"; 

此外,如果你只是要遍歷在所有的結果,無論如何,你還不如剛落,他統計查詢和統計的ExecuteReader的結果,當您遍歷他們。

+0

什麼關於計數變量?他需要改變,以及 – Kuzgun

+1

@Kuzgun:是的,我說的是第二次查詢......不會改變當前的查詢 – musefan

0

的問題不在於你的功能,但與你選擇數據的方式,您可以使用集合函數COUNT(*),這僅返回的行數,如果你加入MAX(ID),這將做同樣認爲,如果你將」按ID分組你的數據是什麼錯是在這種情況下,你會得到兩列之一將是ID值,第二個將是COUNT,但它將是相同的所有ID的

String countString = "SELECT MAX(ID), COUNT (*) FROM medicaments WHERE code_bare = @codebar "; 
String countString = "SELECT MAX(ID), COUNT (*) FROM medicaments WHERE code_bare = @codebar "; 
0

哦是的謝謝,我從我的第一個功能複製了字符串,而不留意

string query = "SELECT * FROM medicaments WHERE code_bare = @codebar";