Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2019, 21:22   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию Загрузить таблицы из файла mdb в Dataset при запуске приложения

Здравствуйте Уважаемые программисты!
На форме (c# winforms vs2010 net4.0) есть DataGridView, в который по кнопке добавляются строки (по одной). При запуске формы из файла Access mdb в набор Dataset копируется таблица "Список", к которой далее происходит обращение (ds.Tables["Список"]) (код1).
Подскажите пожалуйста, как может быть циклом при запуске формы добавлять в набор сразу несколько таблиц?(для примера код2, но из excel)

Код1:
Код:
namespace test
{
    public partial class Form1 : Form
    {
        static string connStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\1.mdb";
        OleDbConnection conn = new OleDbConnection(connStr);
        DataSet ds = new DataSet();

        public Form1()
        {
            InitializeComponent();

            DataSet ds = InitializeDataSet();
        }

        private DataSet InitializeDataSet()
        {
            string query = "SELECT * FROM СПИСОК";
            OleDbDataAdapter da = new OleDbDataAdapter(query, conn);
            da.Fill(ds, "СПИСОК");
            return ds;
        }

        //Добавить строку:
        private void btn_AddRow_Click(object sender, EventArgs e)
        {
            int index = dGV.Rows.Count;
            index++;
            dGV.Rows.Add();

            int nRowIndex = dGV.Rows.Count - 1;

            DataTable dtSpisok = ds.Tables["СПИСОК"];
            ArrayList ListSpisok = new ArrayList();
            foreach (DataRow item in dtSpisok.Rows)
            {
                ListSpisok.Add(item["Название"].ToString());
            }
            DataGridViewComboBoxCell Col = (DataGridViewComboBoxCell)dGV.Rows[nRowIndex].Cells["DGV1"];
            Col.DataSource = ListSpisok;
        }
}
}
Код2:
Код:
Dim conn As ADODB.Connection
   Set conn = New ADODB.Connection

   Dim xl As New Excel.Application
   Dim Sheet As Worksheet
   Dim wksht As String
   Dim strTables As String
   Dim wkbk As Excel.Workbook

   Dim cat As ADOX.Catalog
   Set cat = New ADOX.Catalog
   cat.ActiveConnection = conn

   Dim tbl As ADOX.Table
   Set tbl = New ADOX.Table

   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset

   With wkbk
      For Each tbl In cat.Tables
         If tbl.Type = "TABLE" And left(tbl.Name, 4) <> "MSys" Then
               Set rs = conn.Execute("SELECT * FROM " & tbl.Name)
               wksht = tbl.Name
               Set Sheet = Sheets(wksht)
               Sheets.Add After:=Sheets(Sheets.Count)
               Sheets(Sheets.Count).Name = wksht
               i = 1
               Do While Not rs.EOF
                  Sheets(wksht).Cells(i, 1).Value = rs.Fields("Номер")
                  Sheets(wksht).Cells(i, 2).Value = rs.Fields("Элемент")
                  i = i + 1
                  rs.MoveNext
               Loop
            End If
         End If
      Next tbl
   End With

   rs.Close
   conn.Close

   Set rs = Nothing
   Set conn = Nothing
   Set wkbk = Nothing
   Set xl = Nothing
   Set cat = Nothing
   xl.Quit
ольгаг вне форума Ответить с цитированием
Старый 18.04.2019, 08:40   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Наверное как то так:
Код:
OleDbConnection OleDbConnection = new OleDbConnection(myConnectionString);
OleDbConnection.Open();

DataTable schemaTable;
schemaTable = OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

OleDbCommand OleDbCommand;
OleDbDataReader OleDbDataReader;
DataSet DataSet = new DataSet();


for (int i = 0; i < schemaTable.Rows.Count-1; i++)
{
    
String strTable = schemaTable.Rows[i]["TABLE_NAME"].ToString();

OleDbCommand = new OleDbCommand("SELECT *FROM " + strTable,OleDbConnection);
OleDbDataReader = OleDbCommand.ExecuteReader();
DataSet.Tables.Add(strTable);
OleDbDataAdapter OleDbDataAdapter = new OleDbDataAdapter("SELECT *FROM " + strTable, OleDbConnection);
OleDbDataAdapter.Fill(DataSet, strTable);
}
dataGrid.DataSource = DataSet.DefaultViewManager;

OleDbConnection.Close();

Полно же решений в сети. Чего же в так ленитесь погуглить. Приходится плодить одни и те же посты постоянно ...
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 18.04.2019, 19:33   #3
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Спасибо!
ольгаг вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зарегистрировать класс при запуске приложения Fakov Общие вопросы Delphi 0 30.07.2018 00:35
ошибка при запуске приложения panuta Общие вопросы Delphi 5 21.09.2011 15:39
Зависание приложения при запуске Lazio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.05.2011 16:58
Скрыть форму при запуске приложения PHP&DELPHI_User Общие вопросы Delphi 12 12.10.2010 16:06
Ошибка при запуске приложения -=pasha=- Общие вопросы Delphi 10 07.07.2010 13:46