我在工作中有一些问题。
我正在编写一个显示数据库中的信息的信息管理系统。
该软件的一个特点是能够将显示的信息导出为EXCEL,然后用户可以在EXCEL中修改信息,例如,在名称栏中,将杰克改为杰森,嫁给拉里,然后保存Excel工作表,然后将其导入软件,这样用户所做的所有更改也在数据库中进行修改。
我已经实现了大部分此功能,但在上次批量更新时遇到了问题。我将导入的 Excel 转换为与数据库表具有相同结构的表,然后使用 adapt.update (dt( 实现它。但是,我发现它并没有将用户在Excel中的更改更新到数据库中,而是直接将导入的Excel的信息插入到数据库中,这也导致了数据库中信息的重复。适配器的实现代码。更新 (( 如下所示。其中 dt 是由导入的 Excel 转换的表。
public static bool BatchUpdate("select * from MYDATABASE",DataTable dt,ref string error)
{
if (dt.GetChanges().Rows.Count == 0) return true;
SQLiteConnection conn = SQLiteHelper.GetConnection();
conn.Open();
SQLiteTransaction t = conn.BeginTransaction();
using (SQLiteCommand selectcommand = new SQLiteCommand(selectSql, conn, t))
{
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter())
{
adapter.SelectCommand = selectcommand;
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
adapter.Update(dt);
dt1.AcceptChanges();
}
t.Commit();
return true;
}
}
谢谢大家。我感谢每一个建议。
每个数据行都有四种可能的状态:
-
变
-
新增功能
-
删除
-
改 性
将从 Excel 工作表中获取的行插入到空数据表中时,所有行的状态都将为"新建",因此将插入到数据库中。
您有以下选项:
从数据库中选择数据到数据表中,然后根据从 Excel 工作表中读取的内容更新数据表中的插入或删除内容,然后调用 BatchUpdate 函数。
为 Excel 工作表中的所有行发出更新语句。对于受影响的行数为零的行,发出插入语句。最后,从数据库中选择所有主键,并删除Excel工作表中没有的所有主键。