Как извлечь из базы данных перечислимые данные, если имена и количество столбцов могут различаться? - PullRequest
0 голосов
/ 20 февраля 2020

Как извлечь данные из таблицы данных в базе данных сервера sql, зная, что таблица может иметь разные имена столбцов / количество столбцов в зависимости от запроса?

Я бы обычно использовал SqlDataAdapter, а затем делал бы: da.Fill(dt), но это не вариант, так как я не могу перечислить через dataTable в виде бритвы. Я sh воспроизведу эту таблицу в виде, используя Razor Pages.

Вот пример того, что я обычно могу сделать, но это требует точного знания, какими будут имена столбцов и сколько их будет , Что можно вставить в while, чтобы вернуть все данные таблицы в типе, который можно перечислить?:

SqlConnection connectionCalc = new SqlConnection("<connectionString>");

                    if (connectionCalc.State.Equals(ConnectionState.Closed))
                        connectionCalc.Open();

                    using (var command = connectionCalc.CreateCommand())
                    {
                        command.CommandText = $@"SELECT * FROM {tableName}";

                        SqlDataReader reader = command.ExecuteReader();
                        column = new Dictionary<string, string>();
                        int userUidSingle = -999;

                        while (reader.Read())
                        {
                            CalcScheduleUid.Add(reader[SelectedCalculation + "_CALC_SCHEDULE_UID"].ToString());
                            UserUid.Add(Convert.ToInt32(reader["USER_UID"]));
                            ScheduledDate.Add(Convert.ToDateTime(reader["SCHEDULED_DATE"]));
                            CalcStatusUid.Add(reader[SelectedCalculation + "_CALC_STATUS_UID"].ToString());
                            StartDate.Add(Convert.ToDateTime(reader["CALCULATION_START_DATE"]));
                            EndDate.Add(Convert.ToDateTime(reader["CALCULATION_END_DATE"]));
                            Progress.Add(reader["PROGRESS"].ToString());
                        }

1 Ответ

0 голосов
/ 20 февраля 2020

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

    SELECT TABLE_NAME, COLUMN_NAME FROM 
            INFORMATION_SCHEMA.COLUMNS 
                    where table_name = 'EmployeeDetail'

, когда вы создаете свой перечислимый список, составьте список «кортежей» строк и объектов, возможно, где строка - это имя поля, а объект - значение

...