在不使用外部数据库或表的情况下存储信息的最佳方法是什么?

时间:2014-03-23 14:56:52

标签: c#

好的,所以我需要的是初看起来很简单的东西。我有一个带文本框的win应用程序,让我们说TextBox1。

我想根据用户在框中写的内容返回一个值,如下所示:我有100个值,带有我想要显示的相应文本。

  • 对于文本框中的值“Dan”,我想在另一个框中显示“Text 1”
  • 对于“杰克”,我想要“文字2”

等等。我已经在excel表中有这个对应的内容,所以我知道要显示什么,但如果条款或案例不是那么可以制作100个。

无论如何,我可以在应用程序中存储此列表,只是进行查找或其他正确的值?

编辑1:基于霍根的回复。

我创建了一个按钮并用它来创建字典并在字典中插入2个值。 我创建了另一个按钮来从字典中检索值。

仅当我添加值并在同一运行中检索它时,它才有效。如果我关闭应用程序并尝试检索字典是空的。

编辑2:Hogan的解决方案。 我宣布这本词典是公开的。

    Dictionary<string, string> myLookup;

我在按钮代码中添加了字典创建:

    private void button7_Click(object sender, EventArgs e)
    {
        myLookup = new Dictionary<string, string>();

        myLookup.Add("Dan", "Text 1");
        myLookup.Add("Jake", "Text 2");
    }

我创建了另一个按钮来获取数据:

    private void button8_Click(object sender, EventArgs e)
    {
        MessageBox.Show(myLookup["Dan"]);
    }

如果我单击第一个按钮添加数据,然后第二个按钮检索它的工作原理。如果我关闭应用程序并重新打开,并直接单击第二个应用程序,则无效。

编辑3:我选择了外部文件,史蒂夫的解决方案。由于“无外部文件”解决方案太难以制作(要写下太多代码行)。

3 个答案:

答案 0 :(得分:4)

听起来我正在寻找一种叫做字典的数据结构 - 就是你有一个可以查找值的密钥。

字典可以存储在DB中(作为表格),也可以存储在内存中。例如,你可以这样做:

   Dictionary<string,string> myLookup = new Dictionary<string,string>();

   myLookup.Add("Dan","Text 1");
   myLookup.Add("Jake","Text 2");

一旦myLookup变量可用于代码,您就可以找到要通过简单查找显示的值(它就像一个数组)myLookup[TextBox1.Text]

答案 1 :(得分:0)

您从Excel文件加载数据并填写一个Dictionary对象,其中Key是您的Excel第一列,Value是Excel第二列

 string excelCnString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
                        @"Data Source=ExcelFile.xlsx;" + 
                        @"Extended Properties='Excel 12.0;HDR=YES;IMEX=0'"; 
 Dictionary<string,string> dict = new Dictionary<string,string>()
 using(OleDbConnection cn = new OleDbConnection(excelCnString))
 using(OleDbCommand cmd1 = new OleDbCommand("SELECT * FROM [Sheet$]", cn))
 {
      cn.Open();
      using(OleDbDataReader reader = cmd1.ExecuteReader())
      {
          dict.Add(reader[0].ToString(), reader[1].ToString());
      }
 }

现在您可以将字典简单地用作

 if(dict.ContainsKey(textBox1.Text))
     textBox2.Text = dict[textBox1.Text];

通过这种方式,数据在您的应用程序外部。这意味着您或您的用户可以使用Excel进行更改。在每种情况下,您都会在应用启动时阅读该数据。当然,这意味着您需要使用您的应用程序分发Excel文件,但其优点是可以随意修改文件内容。

当然,您可以提供一个更改数据的界面。在这种情况下,您还需要一种将数据保存回Excel文件的方法。

这样的事情可以完成工作

 string excelCnString = @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
                        @"Data Source=ExcelFile.xlsx;" + 
                        @"Extended Properties='Excel 12.0;HDR=YES;IMEX=0'"; 

 using(OleDbConnection cn = new OleDbConnection(excelCnString))
 using(OleDbCommand cmd1 = new OleDbCommand("UPDATE [Sheet$] SET COLUMN2 = @V1 WHERE COLUMN1 = @V2", cn))
 {
      cmd1.Parameters.AddWithValue("V1", string.Empty);
      cmd1.Parameters.AddWithValue("V2", string.Empty);
      cn.Open();
      foreach(KeyValuePair<string,string> kvp in dict)
      {
          cmd1.Parameters["V1"] = kvp.Value;
          cmd1.Parameters["V2"] = kvp.Key;
          cmd1.ExecuteNonQuery();
      }
 }

答案 2 :(得分:0)

如果您希望此信息永久可用,我建议您将其存储在App.config中,并使用ConfigurationManager类来查找值。这实现起来相当简单。