#c# #database #sqlite
#c# #База данных #sqlite
Вопрос:
Я вставил много информации в базу данных SQLite из своей программы. Теперь моя небольшая задача — просмотреть базу данных и найти из нее некоторую статистику.
Пример: У меня есть база данных с тремя полями — отметкой времени, сообщением и ключом. Теперь я хочу проверить базу данных в столбце сообщения и подсчитать, сколько раз определенное ключевое слово (скажем, «ОШИБКА») встречается в базе данных.
Какой самый простой способ сделать это? ВЫБЕРИТЕ сообщение из базы данных и как мне добавить фильтр???
Я использую регулярное выражение, чтобы отфильтровать некоторые данные перед вставкой. Должен ли я сделать что-то подобное здесь?
Спасибо
Редактировать:
Я использовал упомянутое ниже решение SELECT count (*), но все еще не знаю, как получить значение, чтобы использовать его в другой функции. Я показал код, который использовал ниже. Я новичок в SQL, и, возможно, это неправильно. Пожалуйста, помогите!
public void selectFromDatabase()
{
String cntnStr_query = "data source=C:\TMU_Files\test31.s3db";
SQLiteConnection connection_query = new SQLiteConnection(cntnStr_query);
connection_query.Open();
SQLiteCommand cmd_query = connection_query.CreateCommand();
cmd_query.CommandText = "SELECT count(*) from LogDatabase where LogMessage like '%ERR%'";
SQLiteDataAdapter da_query = new SQLiteDataAdapter(cmd_query);
DataSet ds_query = new DataSet();
//MessageBox.Show(cmd_query.ExecuteNonQuery().ToString());
//MessageBox.Show(count.ToString());
try
{
da_query.Fill(ds_query);
DataTable dt_query = ds_query.Tables[0];
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
cmd_query.Dispose();
connection_query.Close();
}
//cmd_query.Dispose();
//connection_query.Close();
}
}
}
Комментарии:
1. просто для ясности — сколько раз появляется ошибка или количество строк, в которых она появляется?
2. количество строк, в которых он отображается..
Ответ №1:
select count(*) from database where message like '%error%'
Что касается того, как это должно выглядеть в коде, попробуйте что-то вроде этого:
using(var sda=new SQLiteDataAdapter(
"SELECT count(*) from LogDatabase where LogMessage like '%ERR%'",
"data source=C:\TMU_Files\test31.s3db")
{
var dt=new DataTable();
sda.Fill(dt);
return dt;
}
Комментарии:
1. что здесь считается? столбец?
2.
count
возвращает количество строк в запросе.3. есть ли способ вернуть значение count в какую-либо переменную обратно в C #, чтобы я мог использовать его для других целей? Например, где хранится после вычисления?
4. В результирующей таблице данных (если вы вызываете
SqlDataAdapter.Fill
) или в программе чтения (если вы используетеExecuteReader
).5. Пожалуйста, проверьте мой отредактированный код и дайте мне знать, что мне нужно изменить?! Я не могу вызвать SqlDataAdapter.Fill
Ответ №2:
SQLite использует подмножество языка SQL-92, поэтому большинство основ такие же, как и в других средах SQL. предложения SELECT
, FROM
, WHERE
, ORDER BY
, , все работают в основном так, как вы ожидаете.
Документацию по поддерживаемому синтаксису можно найти здесь: SQL в понимании SQLite
Ответ №3:
Количество раз, когда появляется ошибка, определяется примерно следующим образом…
select sum((Length(message) - length(replace(message,'error',''))) / length('error')) from
from database where
message like '%error%'