1

Тема: Масив значень з бд

Привіт. Має трабл з С#.
Мені потрібно створити масив, який містить інфу із бази даних.
Суть - зчитати інфу із бд, проводиться відбр можливих варіантів уже в масиві. І вже по коэфіцієнту частоти визначити найбільш вірогідний варіант.
Чи можливо зробити це в одному масиві, а не обьеднавши декілька масивів в один?

List<string> dName = new List<string>();
List<string> ds1 = new List<string>();
List<string> ds2 = new List<string>();
List<string> ds3 = new List<string>();
List<string> ds4 = new List<string>();
List<string> ds5 = new List<string>();


// Fill dName
sql = @"Select Name from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    dName.Add(Convert.ToString(dataReader[0]));
}

// Fill ds1
sql = @"Select symptom1 from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    ds1.Add(Convert.ToString(dataReader[0]));
}

// Fill ds2
sql = @"Select symptom1 from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    ds2.Add(Convert.ToString(dataReader[0]));
}

// Fill ds3
sql = @"Select symptom1 from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    ds3.Add(Convert.ToString(dataReader[0]));
}

// Fill ds4
sql = @"Select symptom1 from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    ds4.Add(Convert.ToString(dataReader[0]));
}

// Fill ds5
sql = @"Select symptom1 from Deseades";
dataReader = command.ExecuteReader();
while (dataReader.Read())
{
    ds5.Add(Convert.ToString(dataReader[0]));
}

int count = dName.Count();
string[,] des = new string[6, count];

2

Re: Масив значень з бд

Гадки не маю, як це в C# має бути, але з вашого коду бачу десь таке

sql = @"Select Name, symptom1, symptom1, symptom1, symptom1, symptom1 from Deseades";//не знаю, нащо вам 5 однакових полів, але у вашому коді саме так
dataReader = command.ExecuteReader();
var list = new List<int[]>();
while (dataReader.Read())
{
    string [] row = new string[6];
    for(int i=0;i<6;++i)
        row[i]=dataReader[i];
    list.add(row);
}

А далі, якщо хочете, формуйте двовимірний масив і копіюйте в нього.
Сподіваюся, тут знайдеться хтось, хто знає C#.

Подякували: hostik20251

3

Re: Масив значень з бд

koala написав:

Гадки не маю, як це в C# має бути, але з вашого коду бачу десь таке

sql = @"Select Name, symptom1, symptom1, symptom1, symptom1, symptom1 from Deseades";//не знаю, нащо вам 5 однакових полів, але у вашому коді саме так
dataReader = command.ExecuteReader();
var list = new List<int[]>();
while (dataReader.Read())
{
    string [] row = new string[6];
    for(int i=0;i<6;++i)
        row[i]=dataReader[i];
    list.add(row);
}

А далі, якщо хочете, формуйте двовимірний масив і копіюйте в нього.
Сподіваюся, тут знайдеться хтось, хто знає C#.

От в мене і питання... Як на С# зробити двовимірний масив??

4

Re: Масив значень з бд

Дивіться. Ви вже дві теми створили, де вам дали досить точні відповіді на ваші питання, а результату все одно немає. Знаєте чому? Швидше за все, у вас є проблема, яку ви вирішили розв'язувати за допомогою двовимірних масивів, і це рішення було неправильним. Але ви не розповіли нам, яку ж проблему вам треба вирішити насправді, а поки ви цього не зробите,  ми не зможемо вам допомогти. У мене зараз сильна підозра, що у вас, зокрема, неправильна структура БД, що і підштовхнуло вас до неправильних рішень. Але це лише підозра. Так що питайте вже повністю, інакше вашу проблему не вирішити.

Подякували: hostik20251

5

Re: Масив значень з бд

koala написав:

Дивіться. Ви вже дві теми створили, де вам дали досить точні відповіді на ваші питання, а результату все одно немає. Знаєте чому? Швидше за все, у вас є проблема, яку ви вирішили розв'язувати за допомогою двовимірних масивів, і це рішення було неправильним. Але ви не розповіли нам, яку ж проблему вам треба вирішити насправді, а поки ви цього не зробите,  ми не зможемо вам допомогти. У мене зараз сильна підозра, що у вас, зокрема, неправильна структура БД, що і підштовхнуло вас до неправильних рішень. Але це лише підозра. Так що питайте вже повністю, інакше вашу проблему не вирішити.

Щодо рішення ви праві,завжди є інший варіант.Спробую сформувати конкретніше питання.
Я намагаюся створити програму, яка буде за введеними даними(симптомами) звертатися до бази данних, в якій є три таблиці.
Перша таблиця - симптоми. Друга - хвороби. Третя - рекомендації.
Рекомендації повністю пов язані з хворобами.
Користувач має вибрати із симптомів якісь конкретні. Ця інформація передається до бази даних і підбираються хвороби, які мають ті самі симптоми, що ввів користувач. Плюс до того - потрібно провести аналіз і виключити ті хвороби, які не співпадатимуть за симптомами.
Я вирішив піти через створення двух форм. В одній формі - введення симптомів і посилання на другу форму. А в другій формі я хочу вивести вже результат аналізу.
Аналіз і результат я хотів отримати за допомогою двовимірного масиву, заповнивши для початку усі масиви по одному і з єднати їх в один, звідки би і брав дані.
https://replace.org.ua/uploads/images/10239/a70f04aacb63ad060100881e4ff34c0b.png
https://replace.org.ua/uploads/images/10239/1a013e2bcb0cafabaab5f59e7eb8280f.png
https://replace.org.ua/uploads/images/10239/f0e405bd3f1020127a393d0cd9da6b04.png

Нинішній код для form2:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Course
{
    public partial class Form2 : Form
    {
        private SqlConnection sqlConnection = null;
        private SqlDataAdapter adapter = null;
        private DataTable table1 = null; 
        private DataTable table2 = null; 
        string sql = @"Select Name from Troubles";
        

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            sqlConnection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\user\Desktop\Гост\Course\Database1.mdf;Integrated Security=True");
            sqlConnection.Open();

            List<string> troubles = new List<string>();

            SqlCommand command = new SqlCommand(sql, sqlConnection);

            SqlDataReader dataReader = command.ExecuteReader();

            while (dataReader.Read())
            {
                troubles.Add(Convert.ToString(dataReader[0]));
            }

            /*List<Tuple<string, string, string, string, string, string>> deseases = new List<Tuple<string, string, string, string, string, string>>();

            sql = @"Select Name, sumptom1, sumptom2, sumptom3, sumptom4, sumptom5 from Deseades";

            dataReader = command.ExecuteReader();

            while (dataReader.Read())
            {
                deseases[0].Add(Convert.ToString(dataReader[0]));
            }*/

            List<string> dName = new List<string>();
            List<string> ds1 = new List<string>();
            List<string> ds2 = new List<string>();
            List<string> ds3 = new List<string>();
            List<string> ds4 = new List<string>();
            List<string> ds5 = new List<string>();


            // Fill dName
            sql = @"Select Name from Deseades";
            dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
                dName.Add(Convert.ToString(dataReader[0]));
            }

            // Fill ds1
            sql = @"Select symptom1 from Deseades";
            dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
                ds1.Add(Convert.ToString(dataReader[0]));
            }

            // Fill ds2
            sql = @"Select symptom1 from Deseades";
            dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
                ds2.Add(Convert.ToString(dataReader[0]));
            }

            // Fill ds3
            sql = @"Select symptom1 from Deseades";
            dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
                ds3.Add(Convert.ToString(dataReader[0]));
            }

            // Fill ds4
            sql = @"Select symptom1 from Deseades";
            dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
                ds4.Add(Convert.ToString(dataReader[0]));
            }

                    // Fill ds5
                    sql = @"Select symptom1 from Deseades";
                    dataReader = command.ExecuteReader();
                    while (dataReader.Read())
                    {
                        ds5.Add(Convert.ToString(dataReader[0]));
                    }
                        
                   int count = dName.Count();
            string[,] des = new string[6, count];               
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }   
}

6

Re: Масив значень з бд

Синдромів у однієї хвороби може бути багато різних, причому точної кількості немає - в однієї хвороби два, в іншої - 10. Це вже не двовимірний масив з точною кількістю в кожному рядку.
Взагалі відношення хвороба-симптом неоднозначне в обидва боки: у однієї хвороби може бути кілька симптомів, а один симптом може бути в багатьох хвороби. Це те, що зветься "відношення N:N" і реалізується додатковою таблицею. Тобто одна таблиця симптомів
ID    Симптом     Опис
1      Чхання       Різкі скорочення діафрагми з викиданням вмісту верхніх дихальних шляхів через ніздрі
2      Усрачка      Теж нічого хорошого

Друга таблиця хвороб
ID    Назва        Код МКХ10
1      Холера      1.6.3.5
2      Трісичуха 100.100.100.100

І третя - таблиця зв'язків
ID    ID_хвороби  ID_симптому
1      1                 2
2      2                 1
3      2                 2

І не треба підвантажувати всі дані з бази в застосунок. Ідея БД саме в тому, що дані лежать і тривіально обробляються на місці, в базі.
Рекомендації - я не знаю, як ви їх плануєте робити, тому нічого не пораджу.
Звісно, можете робити так, як у вас є, але це веде до проблем - наприклад, у якоїсь хвороби буде на 2 симптоми більше, і що далі? А якщо до симптомів треба буде додати ймовірність? Проміжна таблиця дає чудову можливість це  зробити - просто ще одне поле в цю таблицю. Загалом, таблиця зв'язків не потребує навіть власного ID (ключ - два чужих ID), але то вже залежить від вашої СУБД.

Тепер з іншого боку. Багатовимірний масив - це специфічна структура даних, яка знає про всі свої виміри. Наприклад, матриця. І вам воно тут не потрібне взагалі. Вам потрібен масив масивів (чи список масивів, чи масив списків, чи що там ще в C# є). Загалом, було б правильно читати рядок з БД у якийсь об'єкт, і тоді буде масив об'єктів, хоча треба по ситуації дивитися. Масив масивів - найпростіше, що вам тут підійде:

string [][]des = new string[][];
Подякували: hostik20251