2017-01-02 8 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()関数では、クエリにエラーは表示されませんが、データベース/テーブルは更新/挿入/削除されません。

私がlongitudinalProfileToolStripMenuItem_Click(オブジェクト送信者、EventArgs e)を2回呼び出すと、正しく動作します。

前回は正常に動作しました。 問題は何ですか?

+0

は何ですか? SQLインジェクション攻撃にさらされることを除けば、型変換エラーによりブレークする文字列連結を使用しています。 1つの表が文字列を予期し、別の表が浮動小数点を予期する場合、予期しない小数点記号を含む文字列を入力しようとすると、2番目の表は失敗します。 –

+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();"を追加しました。 –

関連する問題