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


Автор: KelTron 26.2.2009, 11:52
Здравствуйте!

Есть такой код:
Код

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void LoadDataToTable(string filePath, DataTable dataTable)
        {
            string connString =
                    String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" +
                        "Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"",
                        Path.GetDirectoryName(filePath));

            string cmdString = String.Format("SELECT * FROM {0}", Path.GetFileName(filePath));


            using (OleDbConnection connection = new OleDbConnection(connString))
            {
                OleDbDataAdapter adapter = new OleDbDataAdapter(cmdString, connection);
                adapter.Fill(dataTable);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.ofdImportFile.ShowDialog() == DialogResult.OK)
            {
                DataTable dt = new DataTable();
                LoadDataToTable(this.ofdImportFile.FileName, dt);
                this.dataGridView1.DataSource = dt;
            }
        }
    }


Есть такой файл:

Код

1;    2;     3;                  4;     5;     6;     7
sss; 22;   88;                bg;   fgfd; dfg; dfg
sss; 342; dfgdfgdgdfg; 234; rrr;   bbb; vfvc


Проблема заключается в том, что некоторые ячейки не читаются и в дататейбл записываются значения DBNull.
Так, как будто файл выглядит так:
Код

1;    2;     3;   4;     5;      6;     7
sss; 22;   88; ;       fgfd;  dfg;  dfg
sss; 342; ;     234; rrr;    bbb;  vfvc

На скриншоте показано как выглядит вывод такого файла.

Причем при изменении данных в этом файле другие ячейки могут стать нечитаемыми, а эти нормальными, также могут нормально читаться все ячейки, в чём закономерность этого я понять пока не смог. 

Файлы, естествено, без пробелов между ячейками, это я так написал для наглядности.

Подскажите, пожалуйста, как можно решить эту проблему.

П.С. Блин, форматирование съехало...)

Автор: KelTron 26.2.2009, 13:43
После продолжительных поисков я всё - таки нашёл решение свой проблемы, сразу 2 способа)

Приведу их здесь, может кому - то пригодится:
1) В той же директории, что и csv файл создаём файл с именем schema.ini с таким содержимым
Код

[NameOfYourFile.csv]
Format=Delimited(;)
MaxScanRows=0

Значение разделителя, естественно, то что требуется

2) Изменяем реестр:
Код

RegistryKey rk = Registry.LocalMachine;
rk = rk.OpenSubKey("Software");
rk = rk.OpenSubKey("Microsoft");
rk = rk.OpenSubKey("Jet");
rk = rk.OpenSubKey("4.0");
rk = rk.OpenSubKey("Engines");
rk = rk.OpenSubKey("Text", RegistryKeyPermissionCheck.ReadWriteSubTree);
rk.SetValue("MaxScanRows", 0);


Удачи!

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