没有给出一个或多个必需参数的值。 c#oledb

时间:2015-05-15 13:27:37

标签: c# parameters oledb

不确定问题出在哪里。没有给出一个或多个参数的值。我已经尝试将代码移出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";

1 个答案:

答案 0 :(得分:2)

我认为那条线上的问题;

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 Provider不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。

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

也可以更改参数顺序;

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