2011-06-17 43 views
1

我有一個SQLite數據庫,顯示在我的C#窗體中的數據網格視圖。所以,這個數據庫有四列。我特別感興趣的只是其中的一列。該列指示消息的類型。它可以是ERRORS或ALARMS或INITIALIZATION等。現在我添加了可以在數據庫中編輯和更新列的功能。它像,我選擇一個警報列表,然後將它們分組爲警報#1(它們的類型字段已更新)。同樣的報警#2等等......C#SQlite - 計算字符串重複使用查詢(併發症)

所有這些工作正常。問題是我想要計算報警的數量。我發送一個查詢

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()); 
     } 

這顯示了所有在其報警等領域。所以,一開始如果DB有10行報警的。它顯示10這是好的。但現在當我編輯4行作爲報警#1和5行作爲報警#2 ..我希望計數爲3(#1作爲1,#2作爲1和其餘的報警(1在這裏))...

我設法得到一些奇怪的邏輯來得到正確的答案,但只有在當時將ALARMS編輯爲#1或#2時纔有效。如果我關上窗戶,回來它不起作用。這表明10再次...

幫助請

感謝

+0

這是一個很混亂的帖子。你能進一步解釋你的最後兩段嗎?我不確定你想要完成什麼。謝謝。 – IAmTimCorey

+0

我對你在這裏做什麼感到困惑。當你說「但現在當我編輯4行作爲報警#1和5行作爲報警#2」時,這意味着什麼?所以,現在你有10行:1型報警,4型報警#1和5型報警#2? –

+0

@湯姆榛子我仍然有10行..但所有的四行報警#1應計爲1報警。 (而不是4) – techmanc

回答

2

嘗試將它們分組: 不知道,如果語法是SQLite的不同,但類似

SELECT Type, count(*) from LogDatabase where Type like '%ALARM%' Group by Type 

這應該給你

Alarm #1, 4 
Alarm #2, 5 
Alarm #5, 1 

我的C#是生鏽的,但爲了得到鋁l兩列的行需要一個循環,或者一個數據表,或者更多的變量。原諒我,如果我弄亂語法。

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]); 
} 
+0

爲什麼14,10和2? – techmanc

+0

對不起,這些將是這些類型的行數。修正它匹配你的號碼。 – AndyD273

+0

好吧..我嘗試了查詢..似乎是對我來說是正確的!但是我在這裏還有一點疑問......'var dt = new DataTable();''sda.Fill(dt);'' ;這兩行將根據查詢權限填充數據表?我怎樣才能從它提取計數值...我曾經做dt.Rows [0] [0]時,它只是一個值 – techmanc

相關問題