0

datagridview に表示される一致するテキストを含むレコードを削除しようとしています。私は文字列を正しく取得し、何も問題がないように見えますが、レコードは削除されていません。

String text;
int i = dataGridView1.CurrentRow.Index;
text = (string)dataGridView1[0, i].Value.ToString();
String deleteSql = "DELETE FROM [Sugg] WHERE sugg_text='"+text+"'";
MessageBox.Show(text);
if (MessageBox.Show("Are you sure you want to delete this suggestion?", "Title", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    try
    {
        oleDbConnection1.Open();
        oleDbDataAdapter1.DeleteCommand = oleDbConnection1.CreateCommand();
        oleDbDataAdapter1.DeleteCommand.CommandText = deleteSql;

        oleDbDataAdapter1.DeleteCommand.ExecuteNonQuery();
        oleDbConnection1.Close();
4

2 に答える 2

1

本当にエラーがないかどうかを確認するために、try/catch ブロックを削除してみてください。

エラーが発生しないということは、text変数の内容が間違っているか、try/catch ブロックでエラーが失われたことを意味している可能性があります。(完全には見えません)

textまた、ティムが言ったように、SQL ステートメントに値を直接挿入する代わりに、これらの種類のものにはコマンド パラメーターを使用します。内のアポストロフィなど、予期しないことが起こるのを防ぎますtext

String deleteSql = "DELETE FROM [Sugg] WHERE sugg_text=@SUGG_TEXT";
var cmd = oleDbConnection1.CreateCommand();
cmd.CommandText = deleteSql;
cmd.Parameters.AddWithValue("SUGG_TEXT", text);
于 2012-05-01T06:40:39.423 に答える
0

次の構文を使用してみます。使用ブロックは、接続/コマンドをクリーンアップしていることを確認します。

public void TestMethod()
        {
            string connectionstring = "someconnectionstring";
            string deletesql = "delete from table where something = somethingelse";
            using(OleDbConnection con = new OleDbConnection(connectionstring))
            {
                con.Open();
                using(OleDbCommand com = new OleDbCommand(deletesql, con))
                {
                    com.ExecuteNonQuery();
                }
                con.Close();
            }
        }

もちろん、try / catchブロックを追加し、トランザクションをラップして完了する必要がありますが、これにより開始する場所が得られます。

于 2012-05-01T02:20:25.447 に答える