Проблема со вставкой данных из CSV - PullRequest
0 голосов
/ 26 апреля 2018

У меня проблема с импортом CSV в базу данных, если быть более точным, я генерирую файл CSV из файла TXT, а затем пытаюсь импортировать его в базу данных. Приложение зависает от функции, которая должна вставлять данные в таблицу. Я пробовал различные варианты, чтобы сделать это даже без CSV-файла, просто отправив тестовые данные напрямую. Что я здесь сделал неправильно или чего мне не хватает?

 //Uruchomienie importu z CSV do tabeli
private void Loading_Click(object sender, EventArgs e)
{

    Cursor = Cursors.WaitCursor;
    DataTable zaimportowane = WezDane();
    if (zaimportowane == null) return;
    ZapiszDane(zaimportowane);
    MessageBox.Show("load data succ.......!","LoadingDB");
    NazwaCSV.Text = null;
    Cursor = Cursors.Default;

}
//Tutaj ładują się dane po zaimportowaniu pliku CSV
private DataTable WezDane()
{

    DataTable zaimportowane = new DataTable();

    try
    {

        using(StreamReader odczyt = new StreamReader(NazwaCSV.Text))
        {

            string naglowek = odczyt.ReadLine();
            if (string.IsNullOrEmpty(naglowek))
            {

                MessageBox.Show("Brak danych nagłówka", "DataTableDB");
                return null;

            }

            string[] Kolumny = naglowek.Split(';');
            foreach(string Kolumna in Kolumny)
            {

                zaimportowane.Columns.Add(Kolumna);

            }

            while (!odczyt.EndOfStream)
            {

                string linia = odczyt.ReadLine();
                if (string.IsNullOrEmpty(linia)) continue;
                string[] pola = linia.Split(';');
                DataRow zaimportowanyWiersz = zaimportowane.NewRow();

                for(int i = 0;i< pola.Count(); i++)
                {

                    zaimportowanyWiersz[i] = pola[i];

                }

                zaimportowane.Rows.Add(zaimportowanyWiersz);

            }

        }

    }
    catch
    {

        MessageBox.Show("Problem z odczytem pliku :(", "DataTableDB");

    }

    return zaimportowane;

}
//Wpis danych do tabeli
private void ZapiszDane(DataTable zaimportowane_dane)
{

    using (conn)
    {

        conn.Open();
        foreach ( DataRow zaimportowanyWiersz in zaimportowane_dane.Rows)
        {

            SqlCommand SQLcomm = new SqlCommand(@"insert into 
                wyscig(INDEX,TAG ID,TAG COUNT,DATE,READ ON ANT)" +
                @"values ("+zaimportowane_dane.Columns[0]+
                ","+zaimportowane_dane.Columns[1]+
                ","+zaimportowane_dane.Columns[2]+
                ","+zaimportowane_dane.Columns[3]+
                ","+zaimportowane_dane.Columns[4]+")");
            SQLcomm.Parameters.AddWithValue(zaimportowane_dane.Columns[0].Equals("INDEX").ToString(), "TEST");
            SQLcomm.Parameters.AddWithValue(zaimportowane_dane.Columns[1].Equals("TAG ID").ToString(), "TEST");
            SQLcomm.Parameters.AddWithValue(zaimportowane_dane.Columns[2].Equals("TAG COUNT").ToString(), "TEST");
            SQLcomm.Parameters.AddWithValue(zaimportowane_dane.Columns[3].Equals("DATE").ToString(), "TEST");
            SQLcomm.Parameters.AddWithValue(zaimportowane_dane.Columns[4].Equals("READ ON ANT").ToString(), "TEST");
            SQLcomm.ExecuteNonQuery();
            conn.Close();

        }

    }

}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Есть ответ, мне нужно было также изменить поля в таблице из-за их именования, и похоже, что я сделал это сложнее, чем нужно было

 conn.Open();
        using (StreamReader reader = new StreamReader(NazwaCSV.Text))
        {
            reader.ReadLine();
            string line;
            while (!reader.EndOfStream)
            {
                line = reader.ReadLine();
                string[] pola = line.Split(';');
                using (SqlCommand sc = new SqlCommand())
                {
                    sc.CommandText = "INSERT INTO Wyscig(Pozycja,nrTAG,cTAG,czas,dat) VALUES (@poz,@tagid,@tagcount,@data,@odczyt)";
                    sc.Connection = conn;
                    sc.Parameters.Add(new SqlParameter("@poz", pola[0]));
                    sc.Parameters.Add(new SqlParameter("@tagid", pola[1]));
                    sc.Parameters.Add(new SqlParameter("@tagcount", pola[2]));
                    sc.Parameters.Add(new SqlParameter("@data", pola[3]));
                    sc.Parameters.Add(new SqlParameter("@odczyt", pola[4]));
                    sc.ExecuteNonQuery();

                }

            }
        }
        conn.Close();
0 голосов
/ 26 апреля 2018

Несколько вещей, чтобы попробовать:

  • Извлеките свой оператор INSERT со значениями и попробуйте запустить его для вашей базы данных, чтобы убедиться, что он работает на этом уровне (проверяет синтаксис и / или любые проблемы с блокировкой)

  • Вы, кажется, закрываете ваше соединение в цикле for, пытаясь переместить его.

...