私は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回呼び出すと、正しく動作します。
前回は正常に動作しました。 問題は何ですか?
は何ですか? SQLインジェクション攻撃にさらされることを除けば、型変換エラーによりブレークする文字列連結を使用しています。 1つの表が文字列を予期し、別の表が浮動小数点を予期する場合、予期しない小数点記号を含む文字列を入力しようとすると、2番目の表は失敗します。 –
あなたのコードは有効なC#コードではありません。 'computeArea(iProjectID)'は有効な関数宣言ではありません。何が間違っているかを隠すかもしれない例外処理コードを含む、実際にコンパイルする投稿コード –
実際に2番目の関数は個別に呼び出すと正しく機能します。そして私が質問と同じ方法を呼び出すと、それはどんな誤りも示さない。 @PanagiotisKanavos – Rakib