【问题标题】:No value given for one or more required parameters. c# oledb没有为一个或多个必需参数指定值。 c#oledb
【发布时间】:2015-05-15 22:38:13
【问题描述】:

不确定问题出在哪里。没有为一个或多个参数指定值。我尝试将代码从 if 语句中移出,但没有帮助。不确定数据适配器是否要求我输入所有列值。

        int ID = Convert.ToInt32(txtStudent.Text);
        string grade = "A";
        int result = Convert.ToInt32(txtResult.Text);

        string sql = "UPDATE Student SET grade=@grade WHERE ID = ?";

        OleDbCommand command = new OleDbCommand(sql, connectionString);





        if ((result >= 70) && (result <= 100))
        {
            grade = "A";
            MessageBox.Show("Result is: A");

            command.Parameters.Add("@grade", OleDbType.VarChar).Value = grade;
            command.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;



        }

        else if ((result >= 60) && (result < 70))
        {
            grade = "B";
            MessageBox.Show("Result is: B");

            command.Parameters.Add("@grade", OleDbType.VarChar).Value = grade;
            command.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
        }

        else if ((result >= 50) && (result < 60))
        {
            grade = "C";
            MessageBox.Show("Result is: C");

            command.Parameters.Add("@grade", OleDbType.VarChar).Value = grade;
            command.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
        }

        else if (result < 50)
        {
            grade = "F";
            MessageBox.Show("Result is: F");

            command.Parameters.Add("@grade", OleDbType.VarChar).Value = grade;
            command.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
        }

        else
        {
            MessageBox.Show("Incorrect data entered");
        }



        OleDbDataAdapter dataadapter = new OleDbDataAdapter(command);

        DataSet ds = new DataSet();

        dataadapter.Fill(ds, "Student");
        dataGridView1.DataSource = ds;
        dataGridView1.DataMember = "Student";

【问题讨论】:

    标签: c# parameters oledb


    【解决方案1】:

    我认为问题就在那一行;

    OleDbDataAdapter dataadapter = new OleDbDataAdapter(sql, connectionString);
    

    您在命令中添加参数,但仍然使用sql 字符串,该字符串需要OleDbDataAdapter 构造函数中的参数及其值。

    使用您的命令而不是您的 sql 查询;

    OleDbDataAdapter dataadapter = new OleDbDataAdapter(command, connectionString);
    

    并使用using statement 自动处理您的OleDbConnectionOleDbCommandOleDbDataAdapter

    作为您的第二个问题,来自OleDbCommand.Parameters 的文档:

    当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 OleDbCommand 调用的存储过程的命名参数。

    实际上,它确实支持命名参数,但名称可以忽略不计。唯一重要的是您的参数命令。由于您首先添加了@ID 参数您的命令,这将添加到您定义的命令中的第一个参数@grade。如您所见,这会产生问题。

    同时更改您的参数顺序;

    command.Parameters.Add("@grade", OleDbType.VarChar).Value = grade;
    command.Parameters.Add("@ID", OleDbType.VarChar).Value = ID;
    

    【讨论】:

    • 这绝对是一个问题 - 它解释了错误消息。我也会暂时留下我的答案,因为 OP 将遇到下一个问题。如果您想将其合并到您的答案中,我将删除我的...
    • @JonSkeet 当然是乔恩。正如你所说,我完成了我的回答。谢谢。
    • 我还是有一些困难,我已经像你说的那样更新了 command.parameters.add 并且我已经改变了 OleDbDataAdapter dataadapter = new OleDbDataAdapter(command);
    • @Andrew 难度到底是什么?能不能说的具体点?
    • 我现在无法创建现场学生的子列表
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2011-01-23
    • 2022-01-08
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多