gpt4 book ai didi

c# - 通过 Adapter.Update 将 DataTable 保存到 SQLite 数据库

转载 作者:IT王子 更新时间:2023-10-29 06:32:16 36 4
gpt4 key购买 nike

我写了 SQLite 包装器类像这样

using System;
using System.Data;
using System.Data.SQLite;

namespace SuPOS.Sources
{
public class SQLITE
{
private SQLiteConnection con;
private SQLiteCommand cmd;
private SQLiteDataAdapter adapter;

public SQLITE(string databasename)
{
con = new SQLiteConnection(string.Format("Data Source={0};Compress=True;", databasename));
}
public int Execute(string sql_statement)
{
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = sql_statement;
int row_updated;
try
{
row_updated = cmd.ExecuteNonQuery();
}
catch
{
con.Close();
return 0;
}
con.Close();
return row_updated;
}
public DataTable GetDataTable(string tablename)
{
DataTable DT = new DataTable();
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM {0}", tablename);
adapter = new SQLiteDataAdapter(cmd);
adapter.AcceptChangesDuringFill = false;
adapter.Fill(DT);
con.Close();
DT.TableName = tablename;
return DT;
}
public void SaveDataTable(DataTable DT)
{
try
{
Execute(string.Format("DELETE FROM {0}", DT.TableName));
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM {0}", DT.TableName);
adapter = new SQLiteDataAdapter(cmd);
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter);
adapter.Update(DT);
con.Close();
}
catch (Exception Ex)
{
System.Windows.MessageBox.Show(Ex.Message);
}
}
}
}

我通过“GetDataTable”从数据库中检索数据表
并绑定(bind)到 WPF 中的 control.itemsource,例如 DataGrid
我可以在 DataGrid 上添加新行并正确保存到数据库
我可以更改任何列并正确保存到数据库

但问题是,当我向 DataGrid 插入新行并像往常一样调用“SaveDataTable”时
我可以正确保存.. 然后我更改该行的某些列
现在,当我使用“SaveDataTable”时,它会像这张图片那样显示

enter image description here

此消息出现后,
当我调用“SaveDataTable”时,它总是这样说

enter image description here

最佳答案

我知道这是一个旧线程,但您为解决方案编写的额外代码之所以有效,是因为它消除了代码中的错误,您在其中设置:

adapter.AcceptChangesDuringFill = false ; /* default is 'true' */

如果删除上面的行,则不再需要让该行接受更改并且您的方法变得更加简洁:

public DataTable GetDataTable(string tablename)
{
DataTable DT = new DataTable();
con.Open();
cmd = con.CreateCommand();
cmd.CommandText = string.Format("SELECT * FROM {0}", tablename);
adapter = new SQLiteDataAdapter(cmd);
adapter.Fill(DT);
con.Close();
DT.TableName = tablename;
return DT;
}

关于c# - 通过 Adapter.Update 将 DataTable 保存到 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419630/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com