2016-08-04 3 views
-1

Как сохранить словарь в базе данных? или я должен использовать другой подход для моего желаемого результата?Как сохранить словарь в базе данных. [C#]

У меня есть 2 категории. Категория - А и Категория - B

Категория - A шаги:

  • Я выбираю категории А в ComboBox1
  • Введите серийный номер от 100 и до 150.
  • Сериалы создаются и добавляются в combobox2.
  • ComboBox2 состоит из сериалов: {100,101,102,103,104,105 .. и т. Д.}, И ничего больше.

Category - A

Категория - B Шаги:

  • I выберите категорию B в ComboBox1
  • Введите серийный номер от 200 и до 250
  • сериалов генерируется и добавляется в combobox2.
  • ComboBox2 состоит из сериалов: {200,201,202,203,204,205 .. и т. Д.}, И ничего больше.

Category - B

Выбор ComboBox1 IndexChangedEvent

Когда я выбираю категорию - А, я вижу только Сериалы категории А в comboBox2 и больше ничего.

Когда я выбираю категорию - B, я вижу только сериалы категории B в comboBox2 и ничего больше.

Следующий шаг: (желаемый результат)

  • Я хочу, чтобы хранить каждую категорию А с его сериалами и категории B с его серийные номера в базе данных так, когда я вновь открыть приложение и выберите мой категория A, я могу видеть свои сгенерированные сериалы из категории-A в comboBox2, и когда я выбираю Category-B, я могу видеть свои сгенерированные сериалы из категории B в comboBox2 и ничего больше. Проблема в том, как я могу хранить словарь в базе данных.

Код

private void Generate_button1_Click(object sender, EventArgs e) 
    if (comboBox1.SelectedIndex == 0) 
      { 
       comboBox2.Items.Clear(); 

       from = int.Parse(textBox2.Text); 
       to = int.Parse(textBox3.Text); 

       result = to - from; 

       for (int i = 0; i <= result; i++) 
       { 
        string item = Convert.ToString(from + i); // Given"A" to seperate from each other 
        comboBox2.Items.Add(item); 
        vals.Add(new KeyValuePair<int, string>(0, item)); // CatA has 0 key value 
       } 
       MessageBox.Show("Serial Book Generated Success", "Success"); 
      } 

      if (comboBox1.SelectedIndex == 1) 
      { 
       comboBox2.Items.Clear(); 

       from = int.Parse(textBox2.Text); //50 
       to = int.Parse(textBox3.Text); // 60 

       result = to - from; // 10 

       for (int i = 0; i <= result; i++) 
       { 

        string item = Convert.ToString(from + i); // Given"A" to seperate from each other 
        comboBox2.Items.Add(item); 
        vals.Add(new KeyValuePair<int, string>(1, item)); // CatA has 0 key value 

       } 
       MessageBox.Show("Serial Book Generated Success", "Success"); 
      } 
     } 

ComboBox1 Индекс Код события Изменено

if (comboBox1.SelectedIndex == 0) 
      { 
       comboBox2.Items.Clear(); 

       foreach (var item in vals) 
       { 
        if (item.Key == 0) //If Key value is 0, if it is CategoryA 
        { 
         comboBox2.Items.Add(item.Value); 
         // MessageBox.Show("Adding: " + (item.Value.ToString())); 
         comboBox2.Refresh(); 
        } 
       } 
      } 

       if (comboBox1.SelectedIndex == 1) 
       {  
        comboBox2.Items.Clear(); 
        foreach (var item in vals) 
        { 
         if (item.Key == 1) //If Key value is 1, if it is CategoryB 
         { 
          comboBox2.Items.Add(item.Value); 
          comboBox2.Refresh(); 
         } 
        } 
       } 
+0

Пробовали ли вы написать код, который делает что-то с базой данных или вы просите нас, чтобы обеспечить полное решение также с выбором базы данных, определением схемы, вставки и выбирают запросы и, почему нет, обновляет и удаляет? – Steve

+0

@Steve Я добавил datagridview и сохранил элементы в datagridview и вернул их обратно, но это объединило бы оба сериала категории, и у меня были бы объединенные сериалы из Cat A и B в comboBox2, я удалил код. Я прошу вас предоставить код, который позволит сохранить данные категории в базу данных и вернуть их в категорию. – Patrick

+1

Создайте соответствующую схему в экземпляре базы данных, к которому вы хотите подключиться. Затем прочитайте, как взаимодействовать с поставщиком базы данных (* независимо от того, с кем работаете *) и C#. Затем создайте класс в коде C#, который отвечает за сохранение этих данных и передаст им ваш словарь. Наконец, создайте другой класс или метод, чтобы сделать обратное. Это так же хорошо, как вы собираетесь получить этот вопрос, поскольку он очень расплывчатый. Если вы застряли, возвращайтесь с ** конкретным вопросом/проблемой **. – Igor

ответ

2

Сохранение в базе данных потребует некоторой работы, другой вариант (если структура не изменится много) заключается в сериализации объекта на json (Using Newtonsoft's JSON.Net) и сохраняется на диске. Вы также можете написать сериализованный текст в базу данных, если у вас есть один доступный, и вам нужна безопасность и/или доступ и состояние с разных компьютеров.

Вы также можете сохранить состояние того, какие значения были выбраны во время закрытия приложения, чтобы вы могли дать пользователю точный вид, который они отображали, когда они откроют приложение.

Это приложение рабочей консоли, протестированное в .Net 4.0 (но написанное на VS2015).

namespace ConsoleApplication1 
{ 
    using Newtonsoft.Json; 
    using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Populate the dictionary 
      Dictionary<int, string> myDictionary = new Dictionary<int, string>(); 
      myDictionary.Add(1, "one"); 
      myDictionary.Add(2, "two"); 
      myDictionary.Add(3, "three"); 

      // Serialise it to disk 
      string jsonToWrite = JsonConvert.SerializeObject(myDictionary); 
      using (StreamWriter sw = File.CreateText("c:\\temp\\YourDictionary.txt")) 
      { 
       sw.Write(jsonToWrite); 
      } 

      // Deserialise it from Disk back to a Dictionary 
      string jsonToRead = File.ReadAllText("c:\\temp\\YourDictionary.txt"); 
      Dictionary<int, string> myDictionaryReconstructed = 
         JsonConvert.DeserializeObject<Dictionary<int, string>>(jsonToRead); 

      // Check values exist in the two dictionaries 
      if (myDictionary.All(x => myDictionaryReconstructed.Any(y => x.Value == y.Value))) 
      { 
       Console.WriteLine("Success"); 
      } 
      else 
      { 
       Console.WriteLine("Failed"); 
      } 
     } 
    } 
} 
+0

Я получаю сообщение об ошибке, json convert не существует в текущем контексте. Я использую это пространство имен: using System.Runtime.Serialization.Json; – Patrick

+0

Перейдите в nuget и потяните пакет Newtonsoft. https://www.nuget.org/packages/newtonsoft.json/ –

+0

Я использую visual C# 2010, как это сделать вручную? – Patrick

Смежные вопросы