- Регистрация
- 23.11.2013
- Сообщения
- 149
- Благодарностей
- 73
- Баллы
- 28
Вот такой вопрос назрел: как выполнить несколько SELECT-запросов к базе данных в рамках одной сессии? Пока заставил работать только такой код:
Как видно, в каждой итерации соединение с БД устанавливается заново. А сделать иначе не получается, так как:
1) DBCommand.Connection.Open(); не удаётся выполнить вне цикла (до задания строки DBCommand.CommandText)
2) var SQLReader = DBCommand.ExecuteReader(); при повторном вызове ругается, что это соединение уже открыто.
Возможно ли сделать так:
1) создать подключение к БД;
2) выполнить множество запросов в каком-то цикле;
3) закрыть подключение к БД?
Код:
string strTSep = "\t";
string strResult = String.Empty;
double dblQMatches = 0;
DateTime dtStartDate = Convert.ToDateTime("05.08.2015");
DateTime dtFinishDate = DateTime.Now;
DateTime dtCurrentDay = dtStartDate;
//Параметры подключения к БД, команда для MySql
var DBCommand = new MySql.Data.MySqlClient.MySqlCommand();
string strConnectionString = "blablablablablablabla";
//Подключаемся
try{
DBCommand.Connection = new MySql.Data.MySqlClient.MySqlConnection(strConnectionString);
}catch(Exception e){
return "MySql connect failed";
}
while (dtCurrentDay<dtFinishDate) {
//Выполняем запрос и обрабатываем данные
try{
DBCommand.CommandText = "SELECT COUNT(*) FROM ttrss_entries WHERE date_entered>'"+
dtCurrentDay.AddDays(-1).ToString("yyyy-MM-dd") + "' AND date_entered<'"+
dtCurrentDay.AddDays(1).ToString("yyyy-MM-dd") + "';";
DBCommand.Connection.Open();
var SQLReader = DBCommand.ExecuteReader();
while (SQLReader.Read()){
dblQMatches = SQLReader.GetDouble(0);
}
strResult = dtCurrentDay.ToString("dd.MM.yyyy") + strTSep + dtCurrentDay.ToString("dddd") + strTSep + dblQMatches.ToString();
project.SendInfoToLog(strResult);
File.AppendAllText(project.Directory + "\\RssStat.txt", strResult + "\r\n");
//Закрываем запрос
SQLReader.Close();
}catch (MySql.Data.MySqlClient.MySqlException e){
strResult = String.Format("MySql SQLReader exception: {0}", e.Message);
}finally{
//Закрываем подключение к БД
DBCommand.Connection.Close();
}
dtCurrentDay = dtCurrentDay.AddDays(1);
}
return "ok";
1) DBCommand.Connection.Open(); не удаётся выполнить вне цикла (до задания строки DBCommand.CommandText)
2) var SQLReader = DBCommand.ExecuteReader(); при повторном вызове ругается, что это соединение уже открыто.
Возможно ли сделать так:
1) создать подключение к БД;
2) выполнить множество запросов в каком-то цикле;
3) закрыть подключение к БД?