У меня есть приложение в C#, а база данных - sqlite (.db3). Где у меня есть 2 функции.Выполнение запроса базы данных
String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;";
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e)
{
saveProject(iProjectID);
computeArea(iProjectID);
}
public int saveProject(iProjectID)
{
SQLiteCommand sqlite_cmd;
SQLiteCommand sqlite_cmd_PostWork;
SQLiteCommand sqlite_cmd_Design;
sqlite_conn = new SQLiteConnection(sConnectionString);
sqlite_cmd.CommandText = "Delete from prework where pid = " + iProjectID + ";";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = "Insert into prework (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
sqlite_cmd.ExecuteNonQuery();
sqlite_conn.Close();
return 1;
}
public int computeArea(iProjectID)
{
SQLiteCommand sqlite_cmd;
SQLiteCommand sqlite_cmd_PostWork;
SQLiteCommand sqlite_cmd_Design;
sqlite_conn = new SQLiteConnection(sConnectionString);
sqlite_cmd.CommandText = "Delete from postwork where pid = " + iProjectID + ";";
sqlite_cmd.ExecuteNonQuery();
sqlite_cmd.CommandText = "Insert into postwork (pid, chainage, date) values (" + iProjectID + "," + fChainagePostwork + ",'" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") + "');";
sqlite_cmd.ExecuteNonQuery();
sqlite_conn.Close();
return 1;
}
функция saveProject() работает правильно. Но в функции computeArea() запрос не показывает никакой ошибки, но база данных/таблица не обновляет/вставляет/удаляет.
Если я вызову longProfileToolStripMenuItem_Click (отправитель объекта, EventArgs e) во второй раз, он работает правильно.
Но в предыдущее время он работал правильно. В чем проблема?
Какова схема двух таблиц? Вы используете конкатенацию строк, которая, помимо подверженности вас атакам SQL Injection, прерывается из-за ошибок преобразования типов. Если одна таблица ожидает строку, а другая ожидает float, вторая будет терпеть неудачу, если вы попытаетесь ввести строку с неожиданным разделителем десятичной дроби. –
Кстати ваш код недействителен C# код. 'computeArea (iProjectID)' не является допустимым объявлением функции. Почтовый код, который на самом деле компилируется, включая любой код обработки исключений, который может скрывать ошибки –
Фактически 2-я функция работает правильно, если я ее называю индивидуально. И если я называю то же самое, что и вопрос, то он не показывает никаких ошибок. @PanagiotisKanavos – Rakib