Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Невозможно найти устанавливаемый ISAM.


Автор: lankin 3.1.2008, 11:17
В общем сабж. 
Вот код, ругается на строку открытия соединения 46 и пишет "Невозможно найти устанавливаемый ISAM".
Код


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Excel_to_Acces
{
    public partial class Form1 : Form
    {
        private string connStrToExcl;
        private string strExclType;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Add("Excel 8.0");
            comboBox1.Items.Add("Excel 5.0");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            //MessageBox.Show(openFileDialog1.FileName.Substring(13));
            string strExclName = openFileDialog1.FileName.Substring(13);
            connStrToExcl = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = d:\\Исходники\\"
                            + strExclName +";Extended Properties="+strExclType+"; HDR=No; IMEX=1";

            readExclFile(strExclName);
        }
        public void readExclFile(string strSheetName) {
            string strCommand = "Select * From" + strSheetName;
            OleDbConnection conn = new OleDbConnection(connStrToExcl);
            //MessageBox.Show(connStrToExcl.ToString());
            conn.Open();
            OleDbDataAdapter daAdapter = new OleDbDataAdapter(strCommand, connStrToExcl);
            DataTable dtTable = new DataTable(strSheetName);
            daAdapter.FillSchema(dtTable, SchemaType.Source);
            daAdapter.Fill(dtTable);
            conn.Close();
            MessageBox.Show("Количество столбцов= " + dtTable.Columns.Count.ToString()
                                + " ; Количество строк= " + dtTable.Rows.Count.ToString());
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            strExclType = comboBox1.Text;
        }
    }
}

Кто знает в чем проблема, сам сталкиваюсь в первый раз.

Автор: mr.DUDA 3.1.2008, 15:14
Может пройдёт вариант:
Код
 connStrToExcl = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Исходники\\"
                            + strExclName +";Extended Properties="+strExclType+";HDR=No;IMEX=1";

Автор: thomas 3.1.2008, 21:55
lankin
Привет!
Еще вариантик
Код

connStrToExcl = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Исходники\\"
                            + strExclName +";Extended Properties="+ Convert.ToChar(34).ToString() + strExclType+";HDR=No;IMEX=1" + Convert.ToChar(34).ToString();


Автор: lankin 4.1.2008, 10:25
мр ДУДА - получилось то же самое.
Томас - этот вариант помог, расскажи в чем прикол.

Теперь другое: пишет "Ошибка синтаксиса (пропущен оператор) в выражении запроса '* FromИндекс 2008.xls'" и ругается на строку 49 daAdapter.FillSchema(dtTable, SchemaType.Source);
он что, SELECT не может найти?

Автор: lankin 4.1.2008, 10:54
Сделал, работает.

Код

string strCommand = "Select * From" + strSheetName;


переделал на 

Код

string strCommand = "Select * From [Лист2$]";


а как мне узнать вот это самое [Лист2$]

Автор: mr.DUDA 4.1.2008, 14:17
Модератор: Пожалуйста, один топик - один вопрос.

Для начала можно погуглить, наверняка ответ найдётся. smile 

Автор: thomas 4.1.2008, 15:02
lankin
Цитата

расскажи в чем прикол.

в
Код

Convert.ToChar(34).ToString()

выражение в кавычках.  smile 

Теперь ты пишешь в коде
Код

string strCommand = "Select * From" + strSheetName;

и получаешь
Цитата

* FromИндекс 2008.xls

А шпацию кто будет писать, Пушкин? После From сначала шпация, а потом кавычки. И возьми свой Индекс 2008.xls в одинарные кавычки. Это все же string.

Удачи.

Автор: lankin 5.1.2008, 08:39
Вот как решил проблему: поскольку мне лень все время ковыряться в коде и менять имена файлов в строке, то я сделал проще. Добавил элемент C1XLBook.

Код

c1XLBook1.Load(sPathExcl);

Здесь sPathExcl - полный путь к файлу, включая имя. Загружаем в него экселевский файл и получаем доступ к его элементам.
В итоге строка соединения получилась вот такой:
Код

string strCommand = "Select * From [" + c1XLBook1.Sheets[0].Name + "$]";

Осталось только придумать как работать с эксель-файлами, в которых несколько листов.
Кстати: все это не работает с офисом 2007. Поэтому приходится сначала сохранять файл в эксель97-2003.

Автор: wildc 17.4.2008, 13:25
Цитата(lankin @ 5.1.2008,  08:39)
Кстати: все это не работает с офисом 2007. Поэтому приходится сначала сохранять файл в эксель97-2003.

http://www.connectionstrings.com/default.aspx?carrier=excel2007

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)