Обновить базу данных из gridview - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть следующая форма в проекте winform, у меня есть сетка данных внутри, и у меня есть кнопка обновления, которую я хочу, нажав ее, чтобы обновить соответствующую таблицу из изменений таблицы данных.Метка говорит мне, что запись успешно обновлена, но когда я запрашиваю базу данных, она не работает.Есть идеи, пожалуйста?:

              private SqlConnection con;
    private SqlCommandBuilder scbCust;
    private SqlCommandBuilder scbOrd;
    private DataSet dsCommon;
    private SqlDataAdapter custAdapter;
      private void MainForm_Load(object sender, EventArgs e)
    {
             con = new SqlConnection(ConfigurationManager.ConnectionStrings["EbosPr.Properties.Settings.Database1ConnectionString1"].ConnectionString);

        // Creating bridge between Server and DataSet
        custAdapter = new SqlDataAdapter("SELECT * FROM dbo.CustCalls", con);


        // SqlCommandBuilder that can create Update commands
        scbCust = new SqlCommandBuilder(custAdapter);
        con.Open();

        // Filling dataset by respective adapter
        dsCommon = new DataSet();
        custAdapter.Fill(dsCommon, "CustCalls");


        // Set datagridview datasource
        dataGridView1.DataSource = dsCommon.Tables["CustCalls"];

       con.Close();            
       }
   private void update_Click(object sender, EventArgs e)
    {

                con.Open();
        dsCommon.AcceptChanges();
        this.custAdapter.UpdateCommand = this.scbCust.GetUpdateCommand(true);
        int rowCust = this.custAdapter.Update(dsCommon.Tables["CustCalls"]);


        if (rowCust > 0)
        {
            lblMessage.Text = "INFO: Record updated successfully!";
        }
        con.Close();
    }

Это моя строка подключения в app.config

connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Я действительно не могу вспомнить наверняка, но я думаю, что это может быть потому, что вы вызываете AcceptChanges до вашего обновления. Вы говорите своему DataSet принять все ваши изменения и изменения, что приводит к тому, что у ваших обновленных строк будет RowState из «Без изменений». Затем вы делаете обновление, но оно говорит: «Эй, эти строки данных не изменены, поэтому обновления не нужны!»

По крайней мере, я так думаю, что помню эту работу.

Это не проверено, но я думаю, что это работает?

DataSet dataSet;
SqlDataAdapter adapter;
string connectionString = "my connection string";

using (var connection = new SqlConnection(connectionString))
{
    dataSet = new DataSet();
    connection.Open();

    adapter = new SqlDataAdapter("SELECT * FROM dbo.MyTable", connection);
    var commandBuilder = new SqlCommandBuilder(adapter);

    adapter.Fill(dataSet, "MyTable");

    dataGridView1.DataSource = dataSet.Tables["MyTable"];
}

//Whenever you update
using (var connection = new SqlConnection(connectionString))
{
    connection.Open();

    if (adapter.Update(dataSet.Tables["MyTable"]) > 0)
        lblMessage.Text = "INFO: Record updated successfully!";
}
0 голосов
/ 17 февраля 2012

Добавил бы комментарий, но мой представитель недостаточно высок для этого. В любом случае, если вы пройдете и отладите, показываются ли обновления в наборе данных до вызова обновления? Мне интересно, не были ли изменения, внесенные в таблицу данных, отражены в наборе данных перед вызовом обновления. И оператор update может просто запускать обновление для всех строк. При переходе через какое значение rowCust при нажатии кнопки обновить?

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