Я новичок в программировании и получил эту работу, чтобы создать инструмент для преобразования таблицы .DBF в файл .csv.
так вот сценарий;
Таблица dbf 'Poles' содержит четыре поля: 'pole_id', 'guy_hoa_1', 'guy_hoa_2', 'guy_hoa_3' и 'guy_hoa_4'.
И окончательный CSV-файл должен показывать значение только в двух столбцах: 'PoleId' и 'HOA' соответственно, где PoleID будет == pole_id и HOA = guy_hoa_1 + '|' + Guy_hoa_2 + '|' + guy_hoa_3 + '|' + guy_hoa_4.
например, таблица Poles будет иметь такие данные, как;
Пример данных таблицы поляков
И CSV-файл ouput должен показывать данные следующим образом:
Пример выходного файла CSV
* Pole_id является основным полем, и на его основе будут выбраны значения других полей.
Пока мне удалось написать следующий код:
введите код здесь
enter code here
string str = textBox1.Text;
string path = str.Substring(0, str.LastIndexOf("\\") + 1);
string conn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = '" + path + "';Extended Properties=dBase IV;User ID=Admin;Password=;";
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = conn;
connection.Open();
CheckConnectionLabel.Text = "Connected Successfully";
OleDbDataAdapter adapter = new OleDbDataAdapter(@"SELECT pole_id, guy_hoa_1, guy_hoa_2,guy_hoa_3,guy_hoa_4 FROM poles" + ".dbf", connection);
DataSet ds = new DataSet();
DataTable dt = new DataTable();
adapter.Fill(dt);
DataTable dt1 = dt.AsEnumerable()
.Where(r=> r.Field<string>("pole_id")!= null)
.Where(r=> r.Field<string>("pole_id")!=" ")
.CopyToDataTable();
DataTable dtTemp = new DataTable();
dtTemp.Columns.Add("PoleId", typeof(String));
dtTemp.Columns.Add("HOA", typeof(string));
string x = string.Empty;
for (int i=0;i< dt1.Rows.Count;i++)
{
if(dt1.Rows[i]["pole_id"]!= null || dt1.Rows[i]["pole_id"].ToString()!= "")
{
if(dt1.Rows[i]["guy_hoa_1"]!=null && dt1.Rows[i]["guy_hoa_1"].ToString()!="")
{
x =dt1.Rows[i]["guy_hoa_1"].ToString();
}
if(dt1.Rows[i]["guy_hoa_2"]!= null && dt1.Rows[i]["guy_hoa_2"].ToString()!="")
{
x = x + "|" + dt1.Rows[i]["guy_hoa_2"].ToString();
}
if(dt1.Rows[i]["guy_hoa_3"]!=null && dt1.Rows[i]["guy_hoa_3"].ToString()!= "")
{
x = x + "|" + dt1.Rows[i]["guy_hoa_3"].ToString();
}
if(dt1.Rows[i]["guy_hoa_4"]!=null && dt1.Rows[i]["guy_hoa_4"].ToString()!= "")
{
x = x + "|" + dt1.Rows[i]["guy_hoa_4"].ToString();
}
dtTemp.Rows[i]["PoleId"] = dt1.Rows[i]["poles_id"].ToString();
dtTemp.Rows[i]["HOA"] = x ;
}
}
connection.Close();
dataGridView1.DataSource = dtTemp;
}
catch (Exception ex)
{
MessageBox.Show("Error " + ex.Message);
}
}
enter code here
Итак, с помощью приведенного выше кода я подключился к таблице dbf и собрал необходимые данные в таблице 'dt'. Затем я отфильтровал данные, удалив строки, где pole_id был пустым / пустым, и поместил их в другую таблицу 'dt1'. Теперь моя цель состояла в том, чтобы проверить условия в таблице dt1, а затем заполнить строки в таблице dtTemp, которые позже отобразили бы данные в datagridview.
Код правильно выбирает значение x до последнего оператора IF, однако ничего не заполняется в dtTemp datatable, а затем показывает эту ошибку.
Пожалуйста, помогите мне и дайте мне знать, где я неправ ... большое спасибо заранее !!