Lawrence
28-02-2012, 19:41
Добрый день. Недавно начал учить C#, вот решил написать простенький телефонный справочник.
Все шло гладко, пока дело не дошло до сохранения в файл.
1) В чем собственно проблема:
При нажатии на кнопку, которая должна была записать все в файл 1.xls, выскакивает сообщение:
"Не совпадает число значений запроса и число результирующих полей."
И выделяет строку "cmd.ExecuteNonQuery();"
2) Еще раз через раз выскакивает ошибка, что якобы "Процесс не может получить доступ к файлу "1.xls", так как этот файл используется другим процессом."
Сам код:
private void button5_Click(object sender, EventArgs e)
{
string fileName = "1.xls"; // путь файла
System.IO.File.Copy("1.xls", fileName, true); // копируем файл, шаблон файла должен лежать рядом с *.exe (1.xls)
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0;"; // строка подключения
using (OleDbConnection ole = new OleDbConnection(connectionString)) // используем OleDb
{
try
{
ole.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var cmd = new OleDbCommand("INSERT INTO [Лист1$] VALUES ('" + dataGridView1.Rows[0].Cells[0].Value + "','" + dataGridView1.Rows[0].Cells[1].Value + "','" + dataGridView1.Rows[0].Cells[2].Value + "',' ')", ole);
cmd.Connection = ole;
cmd.ExecuteNonQuery(); // вставляем данные в лист1 файла - filename
cmd.Dispose();
}
}
finally
{
ole.Close();
}
}
Мой dataGridView1 имеет в себе 3 колонки.
Строка для начала пока одна. Когда разберусь с сохранением одной строки, то тогда додумаю уже как записать и остальные.
3) Если не трудно, то подскажите, как мне из этого же файла заполнить dataGridView (обратная операция до вышеописанной).
Все шло гладко, пока дело не дошло до сохранения в файл.
1) В чем собственно проблема:
При нажатии на кнопку, которая должна была записать все в файл 1.xls, выскакивает сообщение:
"Не совпадает число значений запроса и число результирующих полей."
И выделяет строку "cmd.ExecuteNonQuery();"
2) Еще раз через раз выскакивает ошибка, что якобы "Процесс не может получить доступ к файлу "1.xls", так как этот файл используется другим процессом."
Сам код:
private void button5_Click(object sender, EventArgs e)
{
string fileName = "1.xls"; // путь файла
System.IO.File.Copy("1.xls", fileName, true); // копируем файл, шаблон файла должен лежать рядом с *.exe (1.xls)
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0;"; // строка подключения
using (OleDbConnection ole = new OleDbConnection(connectionString)) // используем OleDb
{
try
{
ole.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var cmd = new OleDbCommand("INSERT INTO [Лист1$] VALUES ('" + dataGridView1.Rows[0].Cells[0].Value + "','" + dataGridView1.Rows[0].Cells[1].Value + "','" + dataGridView1.Rows[0].Cells[2].Value + "',' ')", ole);
cmd.Connection = ole;
cmd.ExecuteNonQuery(); // вставляем данные в лист1 файла - filename
cmd.Dispose();
}
}
finally
{
ole.Close();
}
}
Мой dataGridView1 имеет в себе 3 колонки.
Строка для начала пока одна. Когда разберусь с сохранением одной строки, то тогда додумаю уже как записать и остальные.
3) Если не трудно, то подскажите, как мне из этого же файла заполнить dataGridView (обратная операция до вышеописанной).