【问题标题】:Conversion failed when converting the varchar value 'System.Windows.Forms.ComboBox+ObjectCollection' to data type int将 varchar 值“System.Windows.Forms.ComboBox+ObjectCollection”转换为数据类型 int 时转换失败
【发布时间】:2018-07-03 07:49:27
【问题描述】:

我开始在一个表单上显示我的DataGrid,我想当我课程idrollno。或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();
}

【问题讨论】:

  • 您只能向 COURSE_ID 发送一个值。看来这里有更多项目的 Items,ToString() 会将其转换为 ObjectCollection 而不是您期望的值。
  • 欢迎来到 Stack Overflow。 :)
  • 嗨,我知道你是新来的。如果您认为某个答案解决了问题,请通过单击答案旁边的灰色复选标记将其标记为“已接受”。检查此链接以了解接受答案的工作原理:meta.stackexchange.com/questions/5234/…

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


【解决方案1】:

你已经传递了整个ComboBox,你需要指定你的ComboBoxSelectedValue。表中的 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;

【讨论】:

猜你喜欢
  • 2011-12-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多