【问题标题】:Saving changes from a DataGridView back to an SQL database?将 DataGridView 中的更改保存回 SQL 数据库?
【发布时间】:2012-07-23 10:07:17
【问题描述】:

我正在尝试制作一个 DataGridView,它显示来自 SQL 数据库 (GSM.sdf) 的数据,并在按下保存按钮时将对 DataGridView 所做的更改保存回数据库。数据显示正常,但按下保存按钮时没有任何反应。我一直在关注这个帖子的最佳答案:

http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/98bc0b4d-a2ea-4b74-81f0-473da624528a

但它没有成功。这是我的代码:

namespace WindowsFormsApplication5
{
    public partial class Zeelot : Form
    {
        DataTable table = new DataTable();
        SqlCeDataAdapter z;
        DataSet gSMDataSet = new DataSet();
        public Zeelot()
        {
            InitializeComponent();
        }
        private void Zeelot_Load(object sender, EventArgs e)
        {
            string b = @"Data Source =.\SQLEXPRESS;database=GSM;Integrated Security=FALSE;Connection Timeout=30;User Instance=FALSE";
            SqlCeConnection conn = new SqlCeConnection(b);
            conn.Open();
            string cd = "SELECT * FROM PhoneNumbers";
            z = new SqlCeDataAdapter(cd, conn);
            z.Fill(gSMDataSet, "PhoneNumbers");
            table = gSMDataSet.Tables[0];
            conn.Close();
            dataGridView1.DataSource = table;
        }
        private void SaveButton_Click(object sender, EventArgs e)
        {
            SqlCeCommandBuilder local_SqlCommandBuilder = new SqlCeCommandBuilder(z);
            local_SqlCommandBuilder.ConflictOption = System.Data.ConflictOption.OverwriteChanges;
            z.UpdateCommand = local_SqlCommandBuilder.GetUpdateCommand();
            z.Update(((System.Data.DataTable)this.dataGridView1.DataSource));
            ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();
        }

    }
}

【问题讨论】:

    标签: c# sql winforms datagridview


    【解决方案1】:
    1. 您不需要最后在DataGridView 上调用.AcceptChanges()。 AcceptChanges() 将更改从您的 DGV 提交到连接的 DataSource(您的 DataTable)

    在尝试将更改提交到数据库之前尝试调用 AcceptChanges()。

    1. 我认为您的问题与您的连接有关。您手动创建并打开一个连接并将其分配给您的 DataAdapter。但是在您的 _Load() 方法中,您关闭了连接。由于 _Click EventHandler 中使用的 DataAdapter 与您的 _Load() 方法中使用的 DataAdapter 相同(因此使用相同的连接)。 它无法向您的数据库提交任何更改,因为您已经关闭了连接。

    您在运行时没有遇到任何异常吗?

    在尝试将更改提交到数据库之前,尝试使用断点检查连接对象的当前状态。

    此外,如果您想在 DataAdapter 中使用连接,AFAIK MS 建议不要手动创建连接。

    DataAdapter 的 Constructor 可以自行创建连接

    【讨论】:

      【解决方案2】:

      我相信您的问题在于您将 DataSource 转换为 System.Data.DataTable

      试试 z.Update(gSMDataSet);

      我也不相信你需要 AcceptChanges()

      【讨论】:

        猜你喜欢
        • 2012-07-07
        • 2013-08-03
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多