将varchar值'System.Windows.Forms.ComboBox + ObjectCollection'转换为数据类型int时转换失败

时间:2018-07-03 07:49:28

标签: c# sql .net sql-server ado.net

我开始在创建DataGridid的过程中显示我创建的表单上的rollno。或enroll否,但是当我执行此代码时,会显示以下问题:

  

将varchar值'System.Windows.Forms.ComboBox + ObjectCollection'转换为数据类型int时转换失败

private void btnSubmit_Click(object sender, EventArgs e)
{
    con.Open();
    cmd = new SqlCommand(
        "select COURSE_Id, ROLL_NO, ENROLL_NO, Sub_P_CODE, STUDENT_NA, th_a_o, th_b_o, th_c_o " +
        "FROM annual_2018 " +
        "where COURSE_ID = '" + course_id.Items.ToString() + "' " +
        "and  (ROLL_NO = '" + txtRoll.Text + "' OR ENROLL_NO = '" + TxtEnroll.Text + "')",
        con);
    da = new SqlDataAdapter(cmd);
    dt = new DataTable();
    da.Fill(dt);

    Enroll_no.DataSource = dt;
    con.Close();
}

1 个答案:

答案 0 :(得分:3)

您已经通过了整个ComboBox,需要指定SelectedValue中的ComboBox。您在表中的COURSE_ID列是一个int数据类型,这就是您需要传递它的内容。另外,您应始终使用parameterized queries来避免SQL Injection。您的代码应如下所示:

int selectedValue = Convert.ToInt32(course_id.SelectedValue.ToString());

cmd = new SqlCommand("select COURSE_Id, ROLL_NO, ENROLL_NO, Sub_P_CODE, STUDENT_NA," +
                     " th_a_o, th_b_o, th_c_o FROM annual_2018 where COURSE_ID = @courseId" +
                     " and  (ROLL_NO = @ROLL_NO  OR ENROLL_NO = @ENROLL_NO)", con);

command.Parameters.AddWithValue("@courseId", selectedValue );
//Other parameters

尽管直接指定类型并使用Value属性比AddWithValue更好。看到这个Can we stop using AddWithValue() already?

cmd.Parameters.Add("@courseId", SqlDbType.Int).Value = selectedValue;