예제 #1
0
        public static void AccessConnect()
        {
            List <List <string> > tableRows = new List <List <string> >();
            // Microsoft Access provider factory
            DbProviderFactory factory    = DbProviderFactories.GetFactory("System.Data.OleDb");
            DbConnection      connection = factory.CreateConnection();
            DataTable         userTables = null;
            DataTable         table      = null;
            List <string>     oneRow     = new List <string>();

            using (connection)                                  // ???
            {
                connection.ConnectionString = connectionString; // Строка подключения
                string[] restrictions = new string[4];          // параметры ограничения
                restrictions[3] = "Table";                      // Только таблицы пользователя

                connection.Open();                              // открыть подключение

                // Get list of user tables
                userTables = connection.GetSchema("Tables", restrictions); // названия пользовательских таблиц

                table = connection.GetSchema("Columns");                   // Получение название колонок
                Console.WriteLine("Press any key to continue.");
                Console.ReadKey();
            }
            List <string> tableNames = new List <string>();

            for (int i = 0; i < userTables.Rows.Count; i++)
            {
                if (userTables.Rows[i][2].ToString()[0] == 'T')
                {
                    tableNames.Add(userTables.Rows[i][2].ToString()); // получение название таблиц
                }
            }
            My_Stuct returnAnswer = new My_Stuct();
            for (int i = 0; i < userTables.Rows.Count; i++)
            {
                Console.WriteLine(userTables.Rows[i][2].ToString()); // вывод названий таблиц
            }
            returnAnswer = Find(table, tableNames);                  // получение строки запроса в access
            List <string> answer = returnAnswer.First;
            tableRows = returnAnswer.Second;
            for (int i = 0; i < tableNames.Count; i++)
            {
                Postgres.TableCreate(answer[i].Remove(answer[i].Length - 1), tableNames[i]); // создание
            }

            OleDbConnection myConnection;

            double buf = 0;
            List <List <string> > querysTable;
            List <string> column;

            for (int i = 0; i < tableNames.Count; i++)
            {
                querysTable  = new List <List <string> >();
                myConnection = new OleDbConnection(connectionString);
                myConnection.Open();

                for (int j = 0; j < tableRows[i].Count; j++)
                {
                    column = new List <string>();

                    string query = "SELECT " + tableRows[i][j] + " FROM " + tableNames[i];


                    OleDbCommand    command = new OleDbCommand(query, myConnection);
                    OleDbDataReader reader  = command.ExecuteReader();
                    // создаем объект OleDbCommand для выполнения запроса к БД MS Access
                    while (reader.Read())
                    {
                        if (reader[0] is DateTime)
                        {
                            column.Add((((DateTime)reader[0]).ToString("yyyy.MM.dd hh:mm:ss")));
                        }
                        else
                        if (double.TryParse(reader[0].ToString(), out buf))
                        {
                            column.Add((reader[0].ToString()).Replace(',', '.'));
                        }
                        else
                        {
                            column.Add(reader[0].ToString());
                        }
                    }

                    querysTable.Add(column);
                }

                Postgres.AddRecord(querysTable, tableRows[i], tableNames[i]);
                Console.WriteLine(tableNames[i]);
            }
        }
예제 #2
0
 static void Main(string[] args)
 {
     Postgres.DBCreate();
     Access.AccessConnect();
 }