删除行时,一个或多个必需参数没有给定值

Posted

技术标签:

【中文标题】删除行时,一个或多个必需参数没有给定值【英文标题】:No given value for one or more required parameters when deleting a row 【发布时间】:2017-10-02 22:21:38 【问题描述】:

我正在尝试从我的数据库中删除一行,当我点击一行然后按下我的删除按钮时,它说“没有一个或多个必需参数的给定值”,我不知道错误是什么,我检查了我的表名,它是正确的。我的另一个删除按钮工作正常

DialogResult result = MessageBox.Show("Are you sure you want to delete this user?",
           "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (result == DialogResult.Yes)
        
            string sql = string.Format(@"DELETE FROM User_list WHERE ID =0",
                dataGridView2.CurrentRow.Cells[0].Value.ToString());
            crudTools.ExecuteQuery(sql);
            crudTools.FillDataGrid("SELECT * FROM User_list", ref dataGridView2);

【问题讨论】:

当您在该 ExecuteQuery 行上放置断点时,sql 变量的值是多少? 【参考方案1】:

问题似乎源于string.Format中的这个查询字符串:

string sql = string.Format(@"DELETE FROM User_list WHERE ID =0", dataGridView2.CurrentRow.Cells[0].Value.ToString());

一个或多个必需参数没有给定值表示WHERE子句中传递的值无效,如果ID是字符串列,只需添加用0 标记的第一个参数用单引号引起来,因为dataGridView2.CurrentRow.Cells[0].Value.ToString() 返回一个字符串,但没有任何单引号括起来,Access 会将其视为数值:

string sql = string.Format(@"DELETE FROM User_list WHERE ID = '0'", dataGridView2.CurrentRow.Cells[0].Value.ToString());

或者如果ID是一个整数列,在传递之前将其转换为int

string sql = string.Format(@"DELETE FROM User_list WHERE ID = 0", Convert.ToInt32(dataGridView2.CurrentRow.Cells[0].Value.ToString()));

注意:如果值来自DataGridView 内的用户输入,请记住使用参数化查询。

类似问题:

No value given for one or more required parameters. error during Search

【讨论】:

我已经尝试了你的两个代码,但它是 string sql = string.Format(@"DELETE FROM User_list WHERE ID = '0'", dataGridView2.CurrentRow.Cells[0].Value. ToString());和 Convert.ToInt32 代码,但结果相同 dataGridView2.CurrentRow.Cells[0].Value 返回什么值?该错误表明您在WHERE 子句中缺少一个参数,我认为可能破坏您的代码的查询只是那一行,您确定crudTools.ExecuteQuery(sql) 中的执行流程中断了吗?

以上是关于删除行时,一个或多个必需参数没有给定值的主要内容,如果未能解决你的问题,请参考以下文章

ASP 错误 没有为一个或多个必需参数指定值

表格 Excel 中的一个或多个必需参数没有给出值

为啥我会收到 OleDbException:“没有为一个或多个必需参数提供值。”例外?

没有为一个或多个必需参数提供值。查询中的错误是啥

VBA SQL'没有为一个或多个必需参数提供值'但字段存在

数据库错误:“没有为一个或多个必需参数提供值。”