Ошибка обновления базы данных Postgres из DataGridView с помощью метода OdbcDataAdapter.Update () - PullRequest
0 голосов
/ 09 мая 2019

У меня есть форма с DataGridView и кнопка.Когда форма загружается, все данные из БД загружаются в DataGridView.Идея состоит в том, что, когда пользователь нажимает кнопку, все модификации данных DataGridView загружаются в БД.Для этого я использую метод DataAdapter.Update (), который должен автоматически генерировать команду UPDATE для любых изменений в DataGridView.Проблема в том, что когда я вызываю этот метод для button1_click (), я получаю эту ошибку:

"InvalidOperationException: обновление требует, чтобы UpdateCommand был действительным, когда сбор данных DataRow задан с измененными строками"

(я получилсообщение об ошибке на испанском и перевел его, поэтому приведенный выше текст может быть бессмысленным).

У меня есть такой код:

    public partial class Form1 : Form
    {

    OdbcConnection conn = new OdbcConnection();
    OdbcDataAdapter adapter = new OdbcDataAdapter();
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    BindingSource bs = new BindingSource();
    OdbcCommand command = new OdbcCommand();

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        dataGridView1.EndEdit();
        adapter.Update(dt);
        DataBind();
    }

    private void DataBind()
    {
        dataGridView1.DataSource = null;
        dt.Clear();

        String connectionString = "connectionStringWhichIsWorking"; 
        String queryString1 = "SELECT * FROM myTable";

        conn.ConnectionString = connectionString;
        conn.Open();

        OdbcCommand command = conn.CreateCommand();
        command.CommandText = queryString1;

        try
        {
            adapter = new OdbcDataAdapter(queryString1, conn);
            adapter.Fill(dt);
            bs = new BindingSource { DataSource = dt };
            dataGridView1.DataSource = bs;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        conn.Close();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        DataBind();
    }
}

Этот код я нашел по другому похожему вопросу в StackOverflowи, кажется, работает для людей там.Для справки, вот откуда я получил этот код: Обновление базы данных с использованием Datagridview (ответ от пользователя wamsow).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...