Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
 Аватар для NightWolf
1 / 1 / 0
Регистрация: 14.02.2010
Сообщений: 43

поля БД

27.04.2011, 16:17. Показов 3368. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подключаюсь к БД и выбираю любую таблицу из этой БД. Так вот мне нужно написать такую функцию, которая получит сведения о составе полей этой таблицы, включая имя поля,тип поля, размер данных поля и т.д.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.04.2011, 16:17
Ответы с готовыми решениями:

Невозможно выполнить выборку по имени поля (по номеру поля все работает)
Вот кусок кода: conn = new SqlCeConnection("Data Source = Database.sdf;"); conn.Open(); ...

Заполнение базы данных с определенного номера поля ключевого поля
Добрый день, написан код для заполнения таблицы на c#, но при запуске выдает ошибку, что не может создать ключевое поле, которое уже...

Данные в combobox одного поля, заменить значением другого поля при сохранении в файл базы
Здравствуйте! суть вопроса - беру данные из файла базы ssldb, таблица sites, поле site отображаю в combobox, после выбора/заполнения ...

7
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
27.04.2011, 16:28
Зависит от БД.
Например, в некоторых СУБД есть спец. таблицы, которые хранят сведения о метаданных БД, т.е. о тех же таблицах, колонках и проч. В этом случае достаточно написать SELECT-ы к этим таблицам
0
334 / 270 / 18
Регистрация: 19.01.2011
Сообщений: 597
27.04.2011, 16:46
Хотелось бы уточнить. Если Вы делаете это своей программой, Вы наверное используете тип DataTable. У нее есть свойство Columns. Или если вы добавили DataSet в свой проэкт - то там еще проще.

Добавлено через 7 минут
Цитата Сообщение от Grossmeister Посмотреть сообщение
Зависит от БД.
Например, в некоторых СУБД есть спец. таблицы, которые хранят сведения о метаданных БД, т.е. о тех же таблицах, колонках и проч. В этом случае достаточно написать SELECT-ы к этим таблицам
Можно возложить собирание данных с метатаблиц целиком на драйвер к определенному серверу БД, и пользоваться DataTable.
0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
27.04.2011, 16:52
Цитата Сообщение от Winsor Посмотреть сообщение
Можно возложить собирание данных с метатаблиц целиком на драйвер к определенному серверу БД, и пользоваться DataTable.
Можно конечно, но зависит от бизнес-условий. Если мне потребуется визуальное отображение каких-то данных, то можно и DataTable. Если мне просто надо получить эти сведения (неважно для чего), т.е. послать запрос, зачем мне использовать лишний компонент?
0
334 / 270 / 18
Регистрация: 19.01.2011
Сообщений: 597
27.04.2011, 16:59
Согласен, но исользование DataTable есть более иниверсальный метод. Если я создаю приложение, которое будет одинаково работать с MySQL, MSSQL, PostgreSQL, Interbase - я буду использовать DataTable, даже если мне не надо визуальное отображение данных...

Не по теме:

Холивар, ах... как это приятно. Дискуссия... :)

0
4217 / 3059 / 583
Регистрация: 21.01.2011
Сообщений: 13,203
27.04.2011, 17:05
Возможно для данной узкой задачи это и так, но вообще я весьма прохладно отношусь к идее приложений, которые "работают с любой СУБД".
Ибо кроме может быть очень простых ситуаций весьма заметны различия в SQL. Да и принципы работы с данными в разных СУБД могут отличаться, соответственно то, что эффективно в одной, может быть совсем неэффективно в другой. Хотя бы "причта во языцах" по поводу работы с временными таблицами в MS SQL и Oracle
0
 Аватар для NightWolf
1 / 1 / 0
Регистрация: 14.02.2010
Сообщений: 43
27.04.2011, 20:05  [ТС]
Вот мой код подключения к БД
C#
1
2
3
4
5
6
7
8
9
10
openFileDialog1.ShowDialog();
path = openFileDialog1.FileName.ToString();
conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path);
conn.Open();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow item in dt.Rows)
{
     comboBox1.Items.Add((string)item["TABLE_NAME"]);
}
conn.Close();
Здесь подключение к БД + вывод названий таблиц в comboBox.
Это все я делаю по учебе, сверх сложного мне не надо, но Winsor пожалуйста напиши пример как сожно получить сведения из полей с помощью DataSet и DataTable, хотелось бы разобраться.
Заранее спасибо.
0
334 / 270 / 18
Регистрация: 19.01.2011
Сообщений: 597
28.04.2011, 10:55
1-й способ. GetSchema
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        enum DbDataTypes
        {
            DBTYPE_EMPTY = 0,
            DBTYPE_NULL = 1,
            DBTYPE_I2 = 2,
            DBTYPE_I4 = 3,
            DBTYPE_R4 = 4,
            DBTYPE_R8 = 5,
            DBTYPE_CY = 6,
            DBTYPE_DATE = 7,
            DBTYPE_BSTR = 8,
            DBTYPE_IDISPATCH = 9,
            DBTYPE_ERROR = 10,
            DBTYPE_BOOL = 11,
            DBTYPE_VARIANT = 12,
            DBTYPE_IUNKNOWN = 13,
            DBTYPE_DECIMAL = 14,
            DBTYPE_UI1 = 17,
            DBTYPE_ARRAY = 0x2000,
            DBTYPE_BYREF = 0x4000,
            DBTYPE_I1 = 16,
            DBTYPE_UI2 = 18,
            DBTYPE_UI4 = 19,
            DBTYPE_I8 = 20,
            DBTYPE_UI8 = 21,
            DBTYPE_GUID = 72,
            DBTYPE_VECTOR = 0x1000,
            DBTYPE_RESERVED = 0x8000,
            DBTYPE_BYTES = 128,
            DBTYPE_STR = 129,
            DBTYPE_WSTR = 130,
            DBTYPE_NUMERIC = 131,
            DBTYPE_UDT = 132,
            DBTYPE_DBDATE = 133,
            DBTYPE_DBTIME = 134,
            DBTYPE_DBTIMESTAMP = 135
        }
//skip...
                Dictionary<string, Dictionary<string, DbDataTypes>> info = new Dictionary<string, Dictionary<string, DbDataTypes>>();
                DataTable tbls=connection.GetSchema("Tables",new string[] { null, null, null, "TABLE" }); //список всех таблиц
                foreach (DataRow row in tbls.Rows)
                {
                    string TableName = row["TABLE_NAME"].ToString();
                    DataTable schemaTable = con.GetSchema("Columns", new string[] { null, null, TableName, null }); //список колумнов в текущей таблице
                    Dictionary<string, DbDataTypes> curr_table_info = new Dictionary<string, DbDataTypes>();
                    foreach (DataRow cr in schemaTable.Rows)
                    {
                        int tp = Convert.ToInt32(cr["DATA_TYPE"]);
                        curr_table_info.Add(cr["COLUMN_NAME"].ToString(), (DbDataTypes)tp);
                    };
                    info.Add(TableName, curr_table_info);
                };
//в info информация о Таблице и Колумнах в ней с указанием типов. Размер поля храниться в других столбцах, в зависимости от типа - это CHARACTER_MAX , NUMERIC_PRESICION, DATETIME_PRESICION. Это , если желаете - можете сделать самостоятельно :)
2-й способ - DataReader - минус в том что привязан к типу соединения (OleDb,SQL, etc...)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
                Dictionary<string, Dictionary<string, Type>> info = new Dictionary<string, Dictionary<string, Type>>(); DataTable tbls = con.GetSchema("Tables", new string[] { null, null, null, "TABLE" }); //список всех таблиц
                foreach (DataRow row in tbls.Rows)
                {
                    string TableName = row["TABLE_NAME"].ToString();
                    string SQLString = String.Format("SELECT * FROM {0} WHERE 1=2", TableName);
                    OleDbCommand command = new OleDbCommand(SQLString, con);
                    OleDbDataReader rdr =command.ExecuteReader(CommandBehavior.KeyInfo);
                    DataTable schema = rdr.GetSchemaTable();
                    Dictionary<string, Type> curr_info = new Dictionary<string, Type>();
                    foreach (DataRow cr in schema.Rows)
                    {
                        curr_info.Add(cr["ColumnName"].ToString(), Type.GetType(cr["DataType"].ToString()));
                    };
                    info.Add(TableName, curr_info);
                };
//остальные полезные поля - ColumnSize например - домашнее задание...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.04.2011, 10:55
Помогаю со студенческими работами здесь

Поля синхронного просмотра, составные и вычислимые поля
Здравствуйте! Нужно написать программу, в которой реализовано взаимодействие с БД, к курсовому проекту. Предположим в базе данных есть две...

Передача поля в контроллер из вьюшки без пападания поля во вьюшку
Здравствуйте. Имеется контроллер: public class TestController { public long personID; ...

При достижении края поля объект должен перерисовываться с противоположной стороны поля
Доброе время суток коллеги. Перейду сразу к делу, имеется игровое поле на котором нанесены объекты, при достижении края поля объект должен...

как сделать Поля таблицы на русском и скрыть поля счетчик в windows forms
как правильно сделать Поля таблицы на русском и скрыть поля счетчик в windows forms? SQL server использую

WPF Binding поля, в качестве поля - объекта класса
Есть вопрос, как можно выполнить биндинг поля объекта класса? Для примера есть такая конструкция: new MainClass(new PartA (Name =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru