根据列表框中选择的内容,从SQL数据库中打开和删除存储的字符串

本文关键字:数据库 字符串 删除 SQL 存储 列表 选择 | 更新日期: 2023-09-27 18:08:08

我有一个非常基本的程序,我正在编写习惯使用visual studio。程序的主窗口包含一个名为listBox1的列表框和一个名为richTextBox1的富文本框,以及几个按钮,这些按钮执行各种操作以从名为DocStorage的表中获取数据,该表有一个名为DocumentName的列,该列将来自richTextBox1的任何单词作为新行存储在数据库中。

我已经设法得到保存功能的工作,它从richTextBox1和存储在数据库中的任何文本作为一行,没有问题。

现在我需要为DELETEOPEN按钮编码。DELETE按钮应该从SQL Server数据库中删除一条记录,这很简单,但我不知道如何根据用户按下名为BtnDeleteDELETE按钮之前从listBox1中选择的项目来制作它。

我也希望能够反向工作和OPEN,存储字符串返回到richTextBox1基于哪个项目的用户在listBox1中选择之前,他们按下命名为BtnOpenOPEN按钮。

尝试从网络实现类似的例子已被证明是不成功的许多尝试后,将感激在正确的方向一些指导,所以我可以了解我在哪里编码这些按钮出错。

我是一个初学者,所以请原谅我的无知,并帮助我得到我的第一个应用程序的最后两个按钮完成!

这是我的BtnDelete_Click代码片段

if (MessageBow.Show("Are you sure you want to Delete this File?", "Open File", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    con.Open();
    SqlConnection con = new SqlConnection(@"...........");
    SqlCommand cmd = new SqlCommand("DELETE [DocumentName] from DocStorage where DocumentName=@DocShred", con);
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(new SqlParameter("@DocShred", listBox1.SelectedItem.ToString());
    con.Close();
    MessageBox.Show("Delete Successful", "File Deleted", MessageBoxButtons.Ok);
}

提前感谢。

根据列表框中选择的内容,从SQL数据库中打开和删除存储的字符串

你在正确的轨道上-只是还没有完全到达....

几件事情:

  • 首先,您打开con.Open(),并在下一行重新创建它-从头开始-这没有任何意义.....
  • 你从来没有执行查询-你正在构建它,添加参数值和所有-但你从来没有真正运行代码!
  • 您应该使用using(....) { .... }块来确保正确处置您的资源

试试这个代码:

if (MessageBow.Show("Are you sure you want to Delete this File?", "Open File", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    // define connection string (load from config) and query statement
    string connStr = ".......";
    string qryDelete = "DELETE [DocumentName] FROM DocStorage WHERE DocumentName = @DocShred";
    // set up the connection and command 
    using (SqlConnection con = new SqlConnection(connStr))
    using (SqlCommand cmd = new SqlCommand(qryDelete, con))
    {
        cmd.Parameters.Add(new SqlParameter("@DocShred", listBox1.SelectedItem.ToString());
        // open connection, execute query, close connection
        con.Open();
        int rowsAffected = cmd.ExecuteNonQuery();
        con.Close();
    }
    MessageBox.Show("Delete Successful", "File Deleted", MessageBoxButtons.Ok);
}

我运行了这个稍微修改过的版本…

private void BtnDelete_Click(object sender, EventArgs e)
        {
            string TrashedDoc = listBox1.SelectedItem.ToString();
            if (MessageBox.Show("Are you sure you want to Delete this File?", "Delete File", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                string connStr = @"...............";
                string qryDelete = "DELETE FROM [DocStorage] WHERE DocumentName = @DocShred";
                using (SqlConnection con = new SqlConnection(connStr))
                using (SqlCommand cmd = new SqlCommand(qryDelete, con))
                {
                    cmd.Parameters.Add(new SqlParameter("@DocShred", TrashedDoc));
                    con.Open();
                    int rowsAffected = cmd.ExecuteNonQuery();
                    con.Close();
                }
                /// if the Delete is successful a message box confirms to user
                MessageBox.Show("Delete Successful", "File Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

,尽管代码运行良好,但由于某种原因,它实际上并没有从数据库中删除列表框中的选定项,它只是给出了Delete success消息。刷新数据库确认没有删除任何内容。