C#:count并从sql获取行的Id

时间:2013-11-28 13:46:39

标签: 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 });
           }
        }

3 个答案:

答案 0 :(得分:1)

您的查询是一个计数查询,您不能使用相同的查询来获取每个条目。您需要使用第二个查询:

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

如果您只想要ID字段,那么只在查询中包含该字段:

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

此外,如果你只是想要迭代所有结果,你也可以放弃计数查询并在循环时计算ExecuteReader的结果。

答案 1 :(得分:0)

问题不在于您的功能,而在于您选择数据的方式,您使用聚合函数COUNT(*),如果您添加MAX(ID),这将只返回行计数,这样做会像想要的那样根据ID对您的数据进行分组是错误的是,在这种情况下,您将得到两列,其中一列是ID值,第二列是COUNT,但对于所有ID都是相同的

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

答案 2 :(得分:0)

哦,是的,谢谢,我从第一个函数复制了字符串而没有注意

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