Импорт Excel в MySql — внешняя таблица не в ожидаемом формате

Я пытаюсь импортировать файл .xlsx (MS Excel 2007) в базу данных (My SQL). Он работает на моем локальном ПК, но не на серверном ПК, где приложение запускается под IIS6.

Это сообщение об ошибке, выдаваемое предложением Try-Catch.

 An external table is not in the expected format.

Я установил Microsoft Access Database Engine 2010 Redistributable и 2007 Office System Driver на серверный ПК.

Вот код

    private void vIPToolStripMenuItem_Click(object sender, EventArgs e)
    {
        fiDatabase = null;
        ofdDatabase.Title = "Select VIP list to input";
        ofdDatabase.Filter = "Excel Files|*.xlsx";
        if (ofdDatabase.ShowDialog() == DialogResult.OK)
        {
            fiDatabase = new FileInfo(ofdDatabase.FileName);
            if (fiDatabase.Exists)
            {
                DeleteVIPList();

                lblDateCreated.Text = fiDatabase.CreationTime.ToShortDateString();
                lblDatabase.Text = fiDatabase.Name;
                lblLocation.Text = fiDatabase.DirectoryName;
                lblSize.Text = String.Format("{0:0,0.0}", fiDatabase.Length) + " byte";
                btnLoadDatabase.Visible = true;
                file = new StreamReader(fiDatabase.FullName);

                OleDbConnection theConnection =
                    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\VIPLIST092211.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\";");
                try
                {
                    theConnection.Open();
                    OleDbDataAdapter theDataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", theConnection);
                    DataSet theDS = new DataSet();
                    DataTable dt = new DataTable();
                    theDataAdapter.Fill(dt);
                    theConnection.Close();

                    dgvCustomer.DataSource = dt.DefaultView;

                    lblRecord.Text = dgvCustomer.Rows.Count.ToString();

                    update = new Update();
                    update.connectionString = MyCon;
                    update.UpdateVIPList(dt);
                }
                catch (Exception ex) 
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                MessageBox.Show("No Database Selected");
            }
        }
    }

Я получил и сообщение об ошибке в «theConnection.Open ()». Пожалуйста, поделитесь со мной решением, если у кого-то была эта проблема раньше. Спасибо.


person SiHyung Lee    schedule 16.12.2011    source источник
comment
Можете ли вы опубликовать свой метод UpdateVIPList.   -  person BizApps    schedule 16.12.2011


Ответы (3)


Мое предложение..

для загрузки больших объемов данных в mysql из excel вы можете использовать формат csv, который более удобен и не требует установки каких-либо драйверов на серверный компьютер. Вот шаги

1) Сохраните Excel в формате csv, используя опцию «Сохранить как».

2) упорядочить столбец в соответствии с форматом таблицы

3) Запустите следующий запрос

загрузить локальный файл данных 'E:\FileName.csv' в поля шаблонов таблиц, заканчивающиеся символом ',', заключенные в строки '"', заканчивающиеся символом '\n' (col1,col2,col3,col4)

Но это зависит от вашего варианта использования

person Anand    schedule 16.12.2011

Можете ли вы опубликовать свой метод UpdateVIPList?

Я не уверен, но, возможно, вам нужно зациклить свой DataTable, чтобы вставить каждую строку в вашу таблицу.

Пример:

      foreach(DataRow drow in dt.Rows)
       {   
                string mycolumnName = drow["ColumName"].ToString();   
                // Loop Per Row then Update
                update = new Update();
                update.UpdateVIPList(mycolumnNam);
       }

где

public bool UpdateVIPList(string mycolumnname)
     {

       //Your insert Logic Insert into Table (..) values (...)
       //Do stuff
        return true;
     } 

С Уважением

person BizApps    schedule 16.12.2011

Вы сказали, что он работает только на локальном хосте. Проблема может заключаться в вашей строке подключения, вы указали «Источник данных = c:\VIPLIST092211.xlsx» как точный путь на текущем хосте. Но этот файл также должен быть доступен с хоста сервера. Вы должны поделиться этим файлом со своими клиентами.

person Devart    schedule 16.12.2011
comment
Большое спасибо за ответ. Я очень ценю вашу помощь - person SiHyung Lee; 09.01.2012