根据列表框中选择的内容,从SQL数据库中打开和删除存储的字符串
本文关键字:数据库 字符串 删除 SQL 存储 列表 选择 | 更新日期: 2023-09-27 18:08:08
我有一个非常基本的程序,我正在编写习惯使用visual studio。程序的主窗口包含一个名为listBox1的列表框和一个名为richTextBox1的富文本框,以及几个按钮,这些按钮执行各种操作以从名为DocStorage
的表中获取数据,该表有一个名为DocumentName
的列,该列将来自richTextBox1的任何单词作为新行存储在数据库中。
我已经设法得到保存功能的工作,它从richTextBox1和存储在数据库中的任何文本作为一行,没有问题。
现在我需要为DELETE
和OPEN
按钮编码。DELETE
按钮应该从SQL Server数据库中删除一条记录,这很简单,但我不知道如何根据用户按下名为BtnDelete
的DELETE
按钮之前从listBox1中选择的项目来制作它。
我也希望能够反向工作和OPEN
,存储字符串返回到richTextBox1基于哪个项目的用户在listBox1中选择之前,他们按下命名为BtnOpen
的OPEN
按钮。
尝试从网络实现类似的例子已被证明是不成功的许多尝试后,将感激在正确的方向一些指导,所以我可以了解我在哪里编码这些按钮出错。
我是一个初学者,所以请原谅我的无知,并帮助我得到我的第一个应用程序的最后两个按钮完成!
这是我的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);
}
提前感谢。
你在正确的轨道上-只是还没有完全到达....
几件事情:
- 首先,您打开
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消息。刷新数据库确认没有删除任何内容。