【问题标题】:Listbox item value not saved to database [closed]列表框项值未保存到数据库[关闭]
【发布时间】:2014-05-22 13:14:20
【问题描述】:

代码是:

protected void bn_add_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FYP"].ConnectionString);
        string str;
        SqlCommand com;
        conn.Open();
        for (int i = 0; i < listbox_selected.Items.Count; i++)
        {
            if (listbox_selected.Items[i].Selected == true)
            {
                str = "INSERT INTO Competency_TechnicalSkill('" + listbox_selected.Items[i].ToString() + "')";
                com = new SqlCommand(str, conn);
                com.ExecuteNonQuery();
            }
        }

我已多次尝试将数据插入 Competency_TechnicalSkill 数据库。然而, 没有任何东西进入数据库,因此,想知道是否有任何解决方案可以解决这个问题。谢谢!

【问题讨论】:

  • 你想在这里做什么?您试图通过列表框项填充表中的哪些字段?是一个字段还是多个字段? Have you checked these questions。如果没有,欢迎来到 StackOverflow。请在发布之前检查类似的问题并尝试接受的答案。
  • 我收到此错误:ExecuteNonQuery:连接属性尚未初始化。
  • 您是否使用一个字段和一个值测试了您的连接字符串是否正确? (没有列表框等)您是否仅在使用列表框插入路由时收到此错误?
  • 问题在这里很清楚。除了连接问题。查看我的答案并尝试

标签: c# asp.net database


【解决方案1】:

我已经重构了你的代码,所以它可以工作。一些 cmets 是内联的。我假设你正在插入一个单列的表。

protected void bn_add_Click(object sender, EventArgs e)
{

    // good idea to check if you have selected items
    if (listbox_selected.SelectedIndex == -1) return;

    // using will take care of closing and disposing
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["FYP"].ConnectionString))
    {
        conn.Open();
        using (SqlCommand command = new SqlCommand())
        {
            command.CommandType = CommandType.Text;

            // if your listbox is multiselect, all you need is to check 'selected items'
            foreach (ListItem item in listbox_selected.Items)
            {
                if (item.Selected == true)
                {
                    // here you didn't have 'values' in your sql query
                    command.CommandText = "INSERT INTO Competency_TechnicalSkill values('" + item.ToString() + "')"; 
                    // if your table has more than one column you need to use: insert into table (col1) values ('data')            
                    command.ExecuteNonQuery();
                }
            }
        }
   }
}

现在,请注意,如果您的 listbox 项目已经是字符串,则无需调用 .ToString() 。我还没有测试过代码,但是应该这样做

【讨论】:

  • 我收到此错误:错误 3“System.Web.UI.WebControls.ListBox”不包含“SelectedItems”的定义,并且没有扩展方法“SelectedItems”接受第一个参数类型为“可以找到 System.Web.UI.WebControls.ListBox'(您是否缺少 using 指令或程序集引用?) C:\Users\Fujitsu\Desktop\HCMS_FYPJ newcy\HCMS_FYPJ\HCMS\AdmCompetencyTechnicalSkill.aspx.cs 99 33 HCMS
  • @user3520985 对不起。出于某种原因,我认为您使用的是 Win Forms。我已经修复了对 asp.net 代码的回答。我还在command 上添加了using,因此它可以重复使用,而不是每次都创建新的,以提高性能。请稍微解决您的问题,以便将其从保留中删除。
  • 我收到此错误:错误 4 'object' 不包含 'Selected' 的定义,并且找不到接受“object”类型的第一个参数的扩展方法 'Selected'(你是缺少 using 指令或程序集引用?) C:\Users\Fujitsu\Desktop\HCMS_FYPJ newcy\HCMS_FYPJ\HCMS\AdmCompetencyTechnicalSkill.aspx.cs 111 30 HCMS
  • @user3520985 我知道问题出在哪里。因为listbox_selected.Items 是一个集合。所以,我用ListItem item 替换了var item。另一种选择是像((ListItem)item).Selected 这样的铸造。这是因为集合包含对象并且不是强类型的。请让我知道它现在是如何工作的。
  • 非常感谢!代码已经可以工作了! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多