有什么不对吗?
我可以获得多条记录但无法获取每条记录的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 });
}
}
答案 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";