Вставить некоторые данные из сетки данных сразу в базу данных Access - PullRequest
0 голосов
/ 27 июня 2019

Я новичок в C #, и я хотел бы вставить некоторые столбцы Datagridview в Access, чтобы впоследствии получить эти данные.

private void metroButton5_Click(object sender, EventArgs e)
try
{
    OleDbConnection connection = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = F:\Database\DBAdatabase.accdb; Persist Security Info = False; ");
    for (int s = 0; s < dataGridView1.Rows.Count - 1; s++)

    {
        OleDbCommand command = new OleDbCommand(@"INSERT INTO Quotations (Position, LVPosition)VALUES('"+dataGridView1.Rows[s].Cells[0].Value+"','"+dataGridView1.Rows[s].Cells[1].Value+"')", connection);

        connection.Open();

        command.Connection = connection;
        command.ExecuteNonQuery();
        MessageBox.Show("Data Saved");

        connection.Close();
    }
}

catch (Exception ex)
{
    MessageBox.Show("Error   " + ex);
}

Я становлюсь ошибкой Systen.Data.OleDb.OleDbException (0x80040E14): синтаксическая ошибка во вставке в.

Может кто-нибудь помочь мне решить ее .....

Thx много ..

Я также ссылался на эту ссылку (https://www.youtube.com/watch?v=8hCfje5VL-0&ab_channel=codefactory2016),, но не могу найти причину ошибки.

1 Ответ

0 голосов
/ 27 июня 2019

С бита, я бы поменял

MessageBox.Show("Error   " + ex); 

до

MessageBox.Show("Error   " + ex.Message);

Это даст вам лучшее понимание ошибки

Кроме того, очень полезно использовать параметры, это предотвращает проблемы с одинарными кавычками и предотвращает проблемы с внедрением sql:

        try
        {
            OleDbConnection connection = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = F:\Database\DBAdatabase.accdb; Persist Security Info = False; ");
            OleDbCommand command = new OleDbCommand("", connection);
            for (int s = 0; s < dataGridView1.Rows.Count - 1; s++)
            {
                command.Parameters.AddWithValue("@position",dataGridView1.Rows[s].Cells[0].Value);
                command.Parameters.AddWithValue("@lvPosition",dataGridView1.Rows[s].Cells[1].Value);

                command.CommandText = "INSERT INTO Quotations (Position, LVPosition) VALUES (@position, @lvPosition)";

                connection.Open();

                //this line is not needed as it is set in the command constructor above
                //command.Connection = connection; 

                command.ExecuteNonQuery();
                MessageBox.Show("Data Saved");

                connection.Close();

                //edit - this needs to run or you will have duplicate values inserted
                command.Parameters.Clear(); 
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error   " + ex.Message);
        }

Даже в этом случае я бы серьезно изучил использование операторов для соединения и команды и попытался бы открыть соединение. Но это становится немного не по теме

...