【问题标题】:how to insert variables of type dictionary in database如何在数据库中插入字典类型的变量
【发布时间】:2012-05-26 21:02:13
【问题描述】:

我想插入一些 var dict = new Dictionary<string, int>(); 类型的值。我有 4 个循环,我想在 var dict 的变量旁边插入另一个值 这是我的代码

 var dict = new Dictionary<string, int>();
                    foreach (string word in wordsbeforesoundex)
                    {

                        if (word == null)
                        {
                            continue;
                        }
                        if (word.Trim() != "")
                        {
                            if (dict.ContainsKey(word))
                            {
                                dict[word]++;
                            }
                            else
                            {
                                dict[word] = 1;
                            }
                        }

                    }
    for (int l = 0; l < words.Length; l++)
    {
        con.Open();

        SqlCommand cmd = new SqlCommand("INSERT INTO TableFFF (Frequency) VALUES (@dict_idx)", con);


        cmd.Parameters.Add(new SqlParameter("@dict_idx", dict[wordsbeforesoundex[l]]));


        cmd.ExecuteNonQuery();
        con.Close();
    }

我的问题是如何获取字典中的数据并插入到数据库中

【问题讨论】:

  • 您能否重新表述我无法理解的问题。如果你想在字典中搜索一个键,你可以使用 dict.Keys 属性来做到这一点。
  • 您在寻找dict.Keys吗?
  • 我的魔法水晶球说:“使用具有 4 个属性的类作为值”
  • 我已经更新了我的问题,希望现在更清楚

标签: c# sql dictionary


【解决方案1】:

您需要有两列,一列用于字典键(单词),另一列用于字典值(频率)

foreach(var pair in dict)
{
    con.Open();

    SqlCommand cmd = new SqlCommand("INSERT INTO TableFFF (Word, Frequency) VALUES (@word, @freq)", con);

    cmd.Parameters.Add(new SqlParameter("@word", pair.Key);
    cmd.Parameters.Add(new SqlParameter("@freq", pair.Value);

    cmd.ExecuteNonQuery();
    con.Close();
}

【讨论】:

  • 我可以用for代替foreach吗??
  • 我已经尝试过了,但我得到了那个错误 No mapping exists from object type System.Collections.Generic.Dictionary`2+KeyCollection[[System.String, mscorlib, Version=4.0.0.0, Culture=中性, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 到已知的托管提供程序本机类型。
  • 看来您正试图将pair 作为参数而不是pair.Keypair.Value。我已经修正了我的答案,因为它在参数中有一个错字(它说的是 dict 而不是 pair)
【解决方案2】:

您需要使用 FOR 循环而不是 foreach.. 传递正确的值,您将需要 for 循环并将 pair.key 更改为 pair[for loop index].key

using (SqlCommand cmd = new SqlCommand("INSERT INTO TableFFF (Word, Frequency) VALUES (@word, @freq)", con))
{
    con.Open();
    for (int i = 0; i < dict.Count; i++)
   {   
      cmd.Parameters.Add(new SqlParameter("@word", pair[i].Key);
      cmd.Parameters.Add(new SqlParameter("@freq", pair[i].Value);

      cmd.ExecuteNonQuery();

    }
}

使用,连接完成后会自动处理

【讨论】:

  • 实际上不是。还有,这是怎么回答的?
  • @ivowiblo 当我给出这个答案时,我不知道为什么,但我看不到 添加评论 按钮.. 我忘了在我的答案中写下这种情况..写了一些其他的地方,但我忘了..所以我需要把它写成答案:(关于for循环..你比我更清楚for循环比foreach循环具有更高的性能;)
  • 所以如果用户寻求帮助,我们需要提供更好的;)他们可以正确地做例子..他问“我可以用for循环代替foreach 的?”并得到错误..所以这意味着 for 循环对他来说更好(简单地)..如果用户的答案解决了他的问题,这将是 答案
  • 但他不需要使用 for 而不是 foreach。他遇到的问题不一样!确实,您似乎只是从另一个答案中复制并忘记添加内容,例如 pair 变量来自哪里? “我可以使用 for 循环而不是 foreach 吗?”的答案。是“是”,就是这样,但这不是问题,这只是一个问题。
  • 如果他理解并正确且更快地做到这一点,那么他需要这样做。你不能等待每个人都按照你的方式。有人使用for循环某人foreach,而有人更喜欢另一种方式。 .关于从另一个答案复制..首先,我不想从一个小的 dict.key 错误中打破你的答案,因为我只是试图简单地将他发送到他更容易理解的方式(for循环)和他需要在他的 for 循环中更改的地方.. 正如您之前所见,我的回答没有给出错误;)所以这可以是从另一个复制的证明,哈?
猜你喜欢
  • 2021-03-03
  • 2016-03-14
  • 1970-01-01
  • 2019-08-12
  • 2016-08-10
  • 1970-01-01
  • 2013-11-14
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多