Здравствуйте, нужно открыть dbf файл, изменить его через SQL запросы и сохранить в другой файл. С dbf никогда не работал, поэтому искал код в инете. Нашел вот такой код для чтения, который работает нормально:
OdbcConnection Conn = null;
...
string str = @"SELECT * FROM D:\Work\rrk.dbf";
DataTable dt = new DataTable();
OdbcDataAdapter da = new OdbcDataAdapter(str, Conn);
da.Fill(dt);
dataGridView1.DataSource = dt;
Но есть еще код для создания таблицы:
string str0 = "Create Table Persons (name char(20))";
OdbcCommand cmd = new OdbcCommand(str0, Conn);
cmd.ExecuteNonQuery();
Который выдает ошибку :"Для ExecuteNonQuery нужно открытое и доступное подключение Connection. Подключение закрыто.". Если добавить Conn.Open(); в начало и Conn.Close(); в конец, код исполняется (таблица видимо создается), но при последующем запуске происходит ошибка "таблица уже создана с таким именем".
Conn.Open();
string str0 = "Create table ass (name char(20))";
OdbcCommand cmd = new OdbcCommand(str0, Conn);
cmd.ExecuteNonQuery();
Conn.Close();
Возникает сразу несколько вопросов: как сохранить созданную таблицу в dbf файл? Как сохранить ее в DataTable (для вывода затем в DataGridView)?
вот нашел кусок кода для DotNetDBF :
using (Stream fos = File.Open(dbffile, FileMode.OpenOrCreate, FileAccess.ReadWrite))
using (var writer = new DBFWriter())
{
writer.CharEncoding = Encoding.GetEncoding(866);
writer.Signature = DBFSigniture.DBase3;
writer.LanguageDriver = 0x26; // кодировка 866
var field1 = new DBFField("DOCDATE", NativeDbType.Date);
var field2 = new DBFField("DOCNUMBER", NativeDbType.Char, 50);
var field3 = new DBFField("POSNAME", NativeDbType.Char, 255);
var field4 = new DBFField("POSCODE", NativeDbType.Numeric, 10, 0);
var field5 = new DBFField("RETPRICE", NativeDbType.Numeric, 10, 2);
var field6 = new DBFField("QUANTITY", NativeDbType.Numeric, 3, 2);
var field7 = new DBFField("APCODE", NativeDbType.Numeric, 10, 0);
var field8 = new DBFField("CLNTNAME", NativeDbType.Char, 255);
var field9 = new DBFField("CLNTPHONE", NativeDbType.Char, 20);
writer.Fields = new[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 };
foreach (var item in items)
{
writer.AddRecord(
// добавляем поля в набор
);
}
writer.Write(fos);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости