我无法从数据库中删除信息

时间:2014-06-11 21:04:41

标签: c# sql database datagridview

我在从数据库中删除所选行时遇到问题。实际上,我在C#中有一个Form,其中包含连接到数据库的dataGridView和一个按钮"删除"当我在按钮上单击时这应该删除dataGridView和数据库中所选行(cell [0]和cell [1])的信息。现在,我在从数据库中删除所选行时遇到问题这是我的代码:

private void button4_Click(object sender, EventArgs e)
        {
            if (journalDataGridView.SelectedRows.Count == 1)
            {
                DataGridViewRow row = journalDataGridView.SelectedRows[0];
                journalDataGridView.Rows.Remove(row);
                SqlConnection connection = new SqlConnection(connectionString);
                connection.Open();
                SqlCommand sql = new SqlCommand("delete from journal where code_journal='" + journalDataGridView.CurrentRow.Cells[0].Value.ToString() + "'AND intitule='" + journalDataGridView.CurrentRow.Cells[1].Value.ToString() + "';", connection);
                connection.Close();
            }
}

dataGridView包含两列" code_journal和initule" 谢谢你的帮助

3 个答案:

答案 0 :(得分:5)

您正在删除该行,然后使用CurrentRow属性引用错误的行。

您也没有使用参数来避免sql注入。

您也没有执行命令:

DataGridViewRow row = journalDataGridView.SelectedRows[0];
connection.Open();
using (SqlCommand sql = new SqlCommand("delete from journal where code_journal=@codeJournal..", connection)) {
  sql.Parameters.AddWithValue("@codeJournal", row.Cells[0].Value.ToString());
  sql.ExecuteNonQuery();
}
connection.Close();
journalDataGridView.Rows.Remove(row);

答案 1 :(得分:2)

除了sorton9999提供的answer之外,另一个问题是你没有对SqlCommand个对象做任何事情。

创建后,您需要执行它:

SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand sql = new SqlCommand("delete from journal where code_journal='" + journalDataGridView.CurrentRow.Cells[0].Value.ToString() + "'AND intitule='" + journalDataGridView.CurrentRow.Cells[1].Value.ToString() + "';", connection);
sql.ExecuteNonQuery();
connection.Close();

通过执行字符串连接,您可以使用参数化查询来打开自己的Sql注入。此外,您应该将SqlConnectionSqlCommand包含在using语句中,以确保它们得到妥善处理。像这样:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlCommand sql = new SqlCommand("delete from journal where code_journal=@codeJournal AND initule=@inituleVal", connection))
    {
         cmd.Parameters.AddWithValue("@codeJournal", journalDataGridView.CurrentRow.Cells[0].Value.ToString());
         cmd.Parameters.AddWithValue("@inituleVal", journalDataGridView.CurrentRow.Cells[1].Value.ToString());
         connection.Open();
         sql.ExecuteNonQuery();
    }
}

答案 2 :(得分:-1)

你的单引号(')和SQL语句中的单词AND之间没有空格吗?

值得一试......