【问题标题】:Save datagridView into sql database将datagridView保存到sql数据库
【发布时间】:2013-08-03 16:38:25
【问题描述】:

第一次将数据网格保存到数据库,感谢您的帮助。
我以这种方式填充 dataGrid:

 private void FillGrid1()
    {
        frmEditovat frm2 = new frmEditovat(this);
        DataTable DT = null;
        DataRow newRow;
        int pTypNastaveniaID = 0;
        string pNazov = "", pHodnota = "";

        DataConnector_My dataConnector = new DataConnector_My(mDataRoot.ConnectCentrum.ConnectionString);


        try
        {
            dataConnector.Init(mDataRoot.ConnectCentrum);

            DT = dataConnector.Get_Nastavenia();

            /* Odstranim zdroj pre Grid. Musi byt koli triedeniu gridu. */
            dataGridView1.DataSource = null;
            /* Smazanie Tabulky. */
            mDTable1.Clear();

            for (int row = 0; row < DT.Rows.Count; row++)
            {
                pTypNastaveniaID = 0; pNazov = ""; pHodnota = "";

                if (DT.Rows[row]["TypNastaveniaID"] != DBNull.Value) pTypNastaveniaID = Convert.ToInt32(DT.Rows[row]["TypNastaveniaID"]);
                if (DT.Rows[row]["Nazov"] != DBNull.Value) pNazov = DT.Rows[row]["Nazov"].ToString();
                if (DT.Rows[row]["Hodnota"] != DBNull.Value) pHodnota = DT.Rows[row]["Hodnota"].ToString();

                newRow = mDTable1.NewRow();

                newRow["TypNastaveniaID"] = pTypNastaveniaID;
                newRow["Nazov"] = pNazov;
                newRow["Hodnota"] = pHodnota;


                mDTable1.Rows.Add(newRow);
            }


            /* Datovy zdroj zpet. */
            dataGridView1.DataSource = mDTable1;

            Application.DoEvents();
        }
        catch (SqlException e)
        {
            MessageBox.Show(this.GetType() + ".FillGrid: " + Environment.NewLine + e.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        finally
        {
            DT.Dispose();
        }

    }

我想在按钮中单击操作后将 datagriView1 保存到数据库:

  private void btnSave_Click_1(object sender, EventArgs e)

或者一些具有类似代码的示例将不胜感激。

【问题讨论】:

  • 只是为了确认 - 基本上你想将数据表 mDTable1 保存到 SQL Server 数据库中,对吗?该数据库中是否存在与mDTable1 逐列匹配的表?

标签: c# sql database winforms datagridview


【解决方案1】:

由于您没有指定是否使用任何 TableAdapters,我猜您只是坚持使用 Datatable ...

最简单的方法是首先查找更改,然后对其进行迭代。根据它们的性质(NEW、UPDATE、DELETED)对数据库执行您自己的查询。

var dataTable = ((DataTable)dataGridView1.DataSource).GetChanges();
if(dataTable != null && dataTable.Rows.Count > 0)
{
  foreach (DataRow row in dataTable.Rows)
        {
            switch (row.RowState)
            {
                case DataRowState.Added:
                    // DO INSERT QUERY
                    break;
                case DataRowState.Deleted:
                    // DO DELETE QUERY
                    break;
                case DataRowState.Modified:
                    SqlCommand command = new SqlCommand("UPDATE YOURTABLE SET TypNastaveniaID = @typ, Nazov = @title, Hodnota = @amount");
                    command.Parameters.Add(new SqlParameter("@typ", row["TypNastaveniaID"]));
                    command.Parameters.Add(new SqlParameter("@title", row["Nazov"]));
                    command.Parameters.Add(new SqlParameter("@amount", row["Hodnota"]));
                    command.ExecuteNonQuery();
                    break;
            }
        }
    ((DataTable)dataGridView1.DataSource).AcceptChanges();
}

希望您能理解。注意需要在根表上调用的 AcceptChanges。它会将更改设置为“完成”,因此下次单击时不会再次遍历相同的行。

【讨论】:

  • 还不知道。在我的情况下,我将使用案例 DataRowState.Modified: ?因为我想将数据更新到新的
  • 添加将用于不在数据库中的新条目
  • 我的条目在数据库中...我更改它们并将它们保存到数据库中
  • 好的,所以我写 SqlCommand command = new SqlCommand("UPDATE .... 而不是 UPDATE QUERY
  • 我已经更新了上面的示例,并通过示例为您填写了修改状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
相关资源
最近更新 更多