【问题标题】:ComboBox Items are not Saving into DataBase in C#组合框项未保存到 C# 中的数据库中
【发布时间】:2016-10-27 17:58:25
【问题描述】:

我对@9​​87654321@ 有疑问。我有一个包含 2 个项目的组合框。现在我想选择其中一个并将其保存到数据库中。但是我在转换 NVARCHAR 值时遇到了关于转换失败的错误。

转换 nvarchar 值时转换失败 'System.Data.DataRowView' 到数据类型 int

我在数据库表中有一个用于该 ComboBox 的字段,该字段具有 VARCHAR(50) 数据类型。请解释一下为什么我出错了?这是代码

private void InsertCourseDetail()
{
    if (string.IsNullOrEmpty(tbID.Text) == true)
    {
        CS = ConfigurationManager.ConnectionStrings["UMSdbConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(CS))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT ISNULL(MAX(course_id),0)+1 FROM CourseDetail", con);
            cmd.CommandType = CommandType.Text;
            tbID.Text = cmd.ExecuteScalar().ToString();
            {
                using (SqlCommand cmd1 = new SqlCommand("INSERT INTO [dbo].[CourseDetail] (course_id,hec_code,course_type,FK_pro_id,course_cre_hour)VALUES(@course_id,@hec_code,@course_type,@FK_pro_id,@course_cre_hour )", con))
                {
                    cmd1.CommandType = CommandType.Text;
                    cmd1.Parameters.AddWithValue("@course_id", tbID.Text);
                    cmd1.Parameters.AddWithValue("@hec_code", tbHECCode.Text);
                    cmd1.Parameters.AddWithValue("@course_type", (cBoxCourseType.SelectedItem == null) ? "NULL" : cBoxCourseType.SelectedItem.ToString());
                    cmd1.Parameters.AddWithValue("@FK_pro_id", (cBoxProgram.SelectedItem == null) ? "NULL" : cBoxProgram.SelectedItem.ToString());
                    cmd1.Parameters.AddWithValue("@course_cre_hour", (cBoxCreditHours.SelectedItem == null) ? "NULL" : cBoxCreditHours.SelectedItem.ToString());
                    cmd1.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("Record Has been Saved Successfully !", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    FillGridView();
                }
            }
        }
    }
}

【问题讨论】:

  • 你得到什么错误信息。把它放在 try catch 中看看。
  • @PavanChandaka 将 nvarchar 值 'System.Data.DataRowView' 转换为数据类型 int 时转换失败。
  • 我认为问题出在 cmd1.Parameters.AddWithValue("@FK_pro_id", (cBoxProgram.SelectedItem == null) ? "NULL" : cBoxProgram.SelectedItem.ToString());您在数据库中的“FK_pro_id”是 int 还是 integer 类型?
  • @PavanChandaka 使用此代码 cmd1.Parameters.AddWithValue("@FK_pro_id", (cBoxProgram.SelectedIndex == -1) ? 0 : cBoxProgram.SelectedValue);第一次保存记录但再次出错
  • 你能告诉我错误是什么吗?

标签: c# winforms combobox


【解决方案1】:

您收到运行时错误:

转换 nvarchar 值时转换失败 'System.Data.DataRowView' 到数据类型 int。

那是因为您尝试使用组合框控件的SelectedItem 设置参数值。事实上SelectedItem 你的组合框是DataRowView。如果您为ComboBox 控件设置了ValueMember,您可以使用他们的SelectedValue,否则您可以将SelectedItem 转换为DataRowView 并读取您想要的字段。例如:

var value = comboBox1.SelectedValue;

var value = ((DataRowView)comboBox1.SelectedItem)["Id"];

【讨论】:

  • 你可能需要一些空检查。
  • 确实与cmd1.Parameters.AddWithValue("@FK_pro_id", (Convert.ToBoolean(cBoxProgram.SelectedValue = -1))? 0 : cBoxProgram.SelectedValue);合作
  • 看来这篇文章回答了你的问题:)
  • 我已经设置了一个条件cBoxProgram.SelectedValue = -1))? 0 : 如果它是-1 表示没有选择然后保存'0'..否则保存选择的值.. 对吗?
  • 我知道您可以使用 comboBox1.SelectedValue 提取值,但老实说,我不知道该值对您意味着什么。
【解决方案2】:

解决了..!!!

cmd1.Parameters.AddWithValue("@FK_pro_id", (Convert.ToBoolean(cBoxProgram.SelectedValue = -1))? 0 : cBoxProgram.SelectedValue);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多