C# 不使用外部数据库或表存储信息的最佳方式是什么?

C# 不使用外部数据库或表存储信息的最佳方式是什么?,c#,C#,好的,我需要的是一些简单的东西。我有一个带文本框的win应用程序,比如TextBox1 我希望根据用户在框中写入的内容返回一个值,如下所示:我有100个值,其中包含我要显示的相应文本 对于文本框中的值“Dan”,我想在另一个框中显示“Text 1” “杰克”我要“文本2” 等等。我已经在excel表格中有了这些对应关系,所以我知道要显示什么,但如果子句或案例不是那么漂亮,就要显示100个 不管怎样,我可以将这个列表存储在应用程序中,只需执行查找或其他操作,然后选择正确的值 编辑1:根据霍根的

好的,我需要的是一些简单的东西。我有一个带文本框的win应用程序,比如TextBox1

我希望根据用户在框中写入的内容返回一个值,如下所示:我有100个值,其中包含我要显示的相应文本

  • 对于文本框中的值“Dan”,我想在另一个框中显示“Text 1”
  • “杰克”我要“文本2”
等等。我已经在excel表格中有了这些对应关系,所以我知道要显示什么,但如果子句或案例不是那么漂亮,就要显示100个

不管怎样,我可以将这个列表存储在应用程序中,只需执行查找或其他操作,然后选择正确的值

编辑1:根据霍根的回复

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

只有在同一次运行中添加值并检索它们时,它才会起作用。如果我关闭应用程序并尝试检索,则字典为空

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

    Dictionary<string, string> myLookup;
如果我单击第一个按钮来添加数据,然后单击第二个按钮来检索数据,则会起作用。如果我关闭应用程序并重新打开,然后直接单击第二个应用程序,则该应用程序不起作用


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

我觉得您正在寻找一种称为字典的数据结构——也就是说,您有一个查找值的键

字典可以存储在数据库中(作为表),也可以存储在内存中。例如,您可以这样做:

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

   myLookup.Add("Dan","Text 1");
   myLookup.Add("Jake","Text 2");
Dictionary myLookup=newdictionary();
myLookup.添加(“Dan”,“文本1”);
添加(“杰克”,“文本2”);

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

我觉得您在寻找一个称为字典的数据结构——也就是说,您有一个查找值的键

字典可以存储在数据库中(作为表),也可以存储在内存中。例如,您可以这样做:

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

   myLookup.Add("Dan","Text 1");
   myLookup.Add("Jake","Text 2");
Dictionary myLookup=newdictionary();
myLookup.添加(“Dan”,“文本1”);
添加(“杰克”,“文本2”);

一旦myLookup变量可用于编码,您就可以通过简单的查找找到要显示的值(它就像一个数组)
myLookup[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'"; 
 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());
      }
 }
这样,数据就位于应用程序的外部。这意味着您或您的用户可以使用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();
      }
 }
string excelCnString=@“Provider=Microsoft.ACE.OLEDB.12.0;”
@“数据源=ExcelFile.xlsx;”
@“扩展属性='Excel 12.0;HDR=YES;IMEX=0';
使用(OleDbConnection cn=新的OleDbConnection(excelCnString))
使用(OleDbCommand cmd1=新的OleDbCommand(“更新[Sheet$]SET COLUMN2=@V1,其中COLUMN1=@V2”,cn))
{
cmd1.Parameters.AddWithValue(“V1”,string.Empty);
cmd1.Parameters.AddWithValue(“V2”,string.Empty);
cn.Open();
foreach(dict中的KeyValuePair kvp)
{
cmd1.参数[“V1”]=kvp.值;
cmd1.Parameters[“V2”]=kvp.Key;
cmd1.ExecuteOnQuery();
}
}

从Excel文件加载数据并填充字典对象,其中键是Excel的第一列,值是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());
      }
 }
这样,数据就位于应用程序的外部。这意味着您或您的用户可以使用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();
      }
 }
string excelCnString=@“Provider=Microsoft.ACE.OLEDB.12.0;”
@“数据源=ExcelFile.xlsx;”
@“扩展属性='Excel 12.0;HDR=YES;IMEX=0';
使用(OleDbConnection cn=新的OleDbConnection(excelCnString))
使用(OleDbCommand cmd1=新的OleDbCommand(“更新[Sheet$]SET COLUMN2=@V1,其中COLUMN1=@V2”,cn))
{
cmd1.Parameters.AddWithValue(“V1”,string.Empty);
cmd1.Parameters.AddWithValue(“V2”,string.Empty);
cn.Open();
foreach(dict中的KeyValuePair kvp)
{
cmd1.参数[“V1”]=kvp.值;
cmd1.Parameters[“V2”]=kvp.Key;
cmd1.ExecuteOnQuery();
}
}

如果希望此信息永久可用,我建议您将其存储在App.config中,并使用ConfigurationManager类查找值。这将非常容易实现。

如果您希望此信息永久可用,我建议您将其存储在App.config中,并使用ConfigurationManager类查找值。这将非常容易实现。

这是否需要持久化?例如,当您重新启动应用程序时,您是否希望值仍然存在?是的,这是我的问题。我希望能够设置一次,并在重新启动应用程序时使其可用。是否