2017-01-02 6 views
0

У меня есть приложение в 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) во второй раз, он работает правильно.

Но в предыдущее время он работал правильно. В чем проблема?

+0

Какова схема двух таблиц? Вы используете конкатенацию строк, которая, помимо подверженности вас атакам SQL Injection, прерывается из-за ошибок преобразования типов. Если одна таблица ожидает строку, а другая ожидает float, вторая будет терпеть неудачу, если вы попытаетесь ввести строку с неожиданным разделителем десятичной дроби. –

+0

Кстати ваш код недействителен C# код. 'computeArea (iProjectID)' не является допустимым объявлением функции. Почтовый код, который на самом деле компилируется, включая любой код обработки исключений, который может скрывать ошибки –

+0

Фактически 2-я функция работает правильно, если я ее называю индивидуально. И если я называю то же самое, что и вопрос, то он не показывает никаких ошибок. @PanagiotisKanavos – Rakib

ответ

-2

Вы можете использовать «с помощью блока» так,

String sConnectionString = "Data Source=mydb.db3;Version=3;Password=123456;"; 
private void longitudinalProfileToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    saveProject(iProjectID); 
    computeArea(iProjectID); 
} 

saveProject(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 
    using (sqlite_conn = new SQLiteConnection(sConnectionString)) 
    { 
     sqlite_conn.Open(); 
     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(); 
    } 
} 

computeArea(iProjectID) 
{ 
    SQLiteCommand sqlite_cmd; 
    SQLiteCommand sqlite_cmd_PostWork; 
    SQLiteCommand sqlite_cmd_Design; 

    using (sqlite_conn = new SQLiteConnection(sConnectionString)) 
    { 
     sqlite_conn.Open(); 
     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(); 
    } 
} 
+0

Как это решить его актуальную проблему? –

+0

Показана ошибка Ошибка «База данных не открыта». – Rakib

+0

Я добавил "sqlite_conn.Open();" –

Смежные вопросы