关于新DataTable的DataAdapter.Update

时间:2018-06-11 16:54:25

标签: c# sqlite sqldataadapter

我正在写一大堆代码的问题。 我想要的是使用DataAdapter.Update和新创建的数据表更新数据库表而不使用DataAdapter.fill。 我已经编写了一个方法来更新数据表中的数据,并且工作正常:

public static int UpdateData<T>(this _ModelManager<T> MM, DataTable dt)
    {
        int updatedRowCount = 0;
        using (SQLiteConnection conn = new SQLiteConnection(connectionString))
        {
            conn.Open();
            using (SQLiteTransaction tr = conn.BeginTransaction())
            {
                try
                {
                    string sql = "SELECT * FROM " + MM.tableName;

                    using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                    {
                        SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
                        SQLiteCommandBuilder builder = new SQLiteCommandBuilder(da);
                        da.AcceptChangesDuringUpdate = true;
                        da.UpdateCommand = builder.GetUpdateCommand();
                        da.DeleteCommand = builder.GetDeleteCommand();
                        da.InsertCommand = builder.GetInsertCommand();

                        updatedRowCount = da.Update(dt);
                        tr.Commit();
                    }
                }
                catch (Exception)
                {
                    tr.Rollback();
                }
            }
            conn.Close();
        }
        return updatedRowCount;
    }

问题是此方法需要数据表作为输入数据。由于我和我的团队更喜欢使用列表(并且已经编写了许多代码),我想创建一个可以接受列表的重载方法,从该列表创建数据表,然后使用已经编写的内容更新数据库方法。这就是我所做的:

 public static int UpdateData<T>(this _ModelManager<T> MM, List<T> list)
    {
        DataTable dt = list.ToDataTable();
        foreach (DataRow row in dt.Rows)
        {
            row.SetModified();
        }

        return MM.UpdateData(dt);
    }

此方法正常运行并返回正确数量的更新行,但数据库未使用新数据进行更新。有人可以帮我理解我的错误吗? Ty为你提供帮助。

0 个答案:

没有答案