DBF + C#
DBF + C#
Убил день, казалось бы на пустяковую задачку. Взять данные из DBF составленной с помощью Visual Fox Pro.
Огромное спасибо вот этому парню. В результате сделал как у него.
1. Как создать файл DBF из С#
По ходу копания в нете натолкнулся
namespace WorkDBF { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { OdbcConnection conn = new OdbcConnection(); conn.ConnectionString = @"Driver={Microsoft dBASE Driver (*.dbf)}"; //объявляем команду создания новой таблички dbf OdbcCommand cmd_create = new OdbcCommand(@"CREATE TABLE [{0}] "
+ "(itemName Char(40), itemValue Numeric, itemInfo Char(150))", conn); conn.Open(); //открываем соединение cmd_create.ExecuteNonQuery(); //выполняем команду conn.Close();//закрываем соединение }
2.Как открыть файл DBF
Для начала нужно установить себе драйвер Visual FoxPro.
Мой файл лежит : E\ANALIZ.DBF
В заголовке необходимо прописать
using System.Data.OleDb;
Вот собственно класс
public string StartLoad()
{
string result;
OleDbConnection conn = new OleDbConnection();
DataTable dt = new DataTable();
DataRow row;
DataColumn column = new DataColumn();
try
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\;Extended Properties=dBASE IV;User ID=;Password=;";
conn.Open();
OleDbCommand comm = conn.CreateCommand();
comm.CommandText = @"SELECT * FROM ANALIZ";
dt.Load(comm.ExecuteReader());
column = dt.Columns[0];
row = dt.Rows[0];
result = row[column].ToString();
dataGridView1.DataSource = dt;
}
catch (Exception e)
{
result = e.ToString();
}
finally
{
conn.Close();
}
return result;
}
{
string result;
OleDbConnection conn = new OleDbConnection();
DataTable dt = new DataTable();
DataRow row;
DataColumn column = new DataColumn();
try
{
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\;Extended Properties=dBASE IV;User ID=;Password=;";
conn.Open();
OleDbCommand comm = conn.CreateCommand();
comm.CommandText = @"SELECT * FROM ANALIZ";
dt.Load(comm.ExecuteReader());
column = dt.Columns[0];
row = dt.Rows[0];
result = row[column].ToString();
dataGridView1.DataSource = dt;
}
catch (Exception e)
{
result = e.ToString();
}
finally
{
conn.Close();
}
return result;
}
Кидаем на форму кнопку и datagridview
private void button1_Click(object sender, EventArgs e)
{
{
StartLoad();
}
}
У меня получилось следующее:
Насчет кодировки. Dbf формат старый, вполне возможна кодировка dos (866). Но мне не повезло и у меня оказалась западноевропейская 1252. Вычислил с помощью Total Comander. в общем код перекодировки string o = dt.Rows[17][2].ToString(); //строка
var fromEncodind = Encoding.GetEncoding(1252);//из какой кодировки
var bytes = fromEncodind.GetBytes(o);
var toEncoding = Encoding.GetEncoding(1251);//в какую кодировку
string ans = toEncoding.GetString(bytes);
MessageBox.Show(ans);
Функция для перекодировки данных в DataGridView
public void ConvertMe() {
try
{
for (int tt = 0; tt < this.dataGridView1.RowCount - 1; tt++)
{
// Convert(dataGridView1)
string o = dt.Rows[tt][1].ToString();
var fromEncodind = Encoding.GetEncoding(1252);//из какой кодировки
var bytes = fromEncodind.GetBytes(o);
var toEncoding = Encoding.GetEncoding(1251);//в какую кодировку
string nom = toEncoding.GetString(bytes);
dt.Rows[tt][1]= nom;
}
}
catch (Exception msg)
{
MessageBox.Show(msg.ToString());
}
}
Комментарии
Отправить комментарий