我有一个 SQLite 数据库,它显示在我的 C# Windows 窗体的数据 GridView 中。所以,这个数据库有四列。我特别感兴趣的只是其中一个专栏。该列指示消息的类型。它可以是错误、警报或初始化等。现在我添加了可以在数据库中编辑和更新列的功能。
就像,我选择了一个警报列表,然后将它们分组为警报 #1(它们的类型字段已更新)。同样 ALARM #2 等等......
一切正常。问题是当我想计算警报的数量时。我发送查询
using(var sda=new SQLiteDataAdapter("SELECT count(*) from LogDatabase where Type like '%ALARM%'", "data source=" + database_path))
{
var dt = new DataTable();
int sum_rows_selected=0;
sda.Fill(dt);
int alarms_total = Convert.ToInt16(dt.Rows[0][0]);
MessageBox.Show(alarms_total.ToString());
}
这显示了其中包含 ALARM 的所有字段。因此,最初如果 DB 有 10 行 ALARMS 类型。它显示 10,这很好。但是现在当我将 4 行编辑为 ALARM # 1 和 5 行作为 ALARM # 2.. 我希望计数为 3(#1 为 1,#2 为 1,其余的 ALARMS(此处为 1))...
我设法得到一些奇怪的逻辑来得到正确的答案,但这只有在当时将 ALARMS 编辑为 #1 或 #2 时才有效。如果我关闭窗口然后再回来,它就不起作用了。它再次显示 10...
请帮忙
谢谢
最佳答案
尝试将它们分组: 不确定 SQLite 的语法是否不同,但类似
SELECT Type, count(*) from LogDatabase where Type like '%ALARM%' Group by Type
这应该给你
Alarm #1, 4
Alarm #2, 5
Alarm #5, 1
我的 C# 很生疏,但要获取两列的所有行,您需要一个循环、一个数据表或更多变量。如果我搞砸了语法,请原谅我。
string alarms_name[];
int alarms_total[];
int i;
For(i=0;i < dt.Count; i++){
alarms_name[i] = Convert.ToInt16(dt.Rows[i][0]);
alarms_total[i] = Convert.ToInt16(dt.Rows[i][1]);
}
关于C# SQlite - 使用 Query 计算字符串重复的次数(并发症),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6389318/