c# - SQLite,将数据集/数据表复制到数据库文件

标签 c# database sqlite datatable dataset

我用从另一个 数据库文件创建的表填充了一个数据集。该表不在我希望能够将表复制到的数据库文件中。

现在我想将所有这些记录 (DataTable) 保存到新创建的 SQLite 数据库文件中......

我该怎么做?

如果可能的话,我真的很想避免循环。

最好的答案是我 :) 所以我会分享它。这是一个循环,但在 2-3 秒内写入 100k 个条目。

using (DbTransaction dbTrans = kaupykliuduomConn.BeginTransaction())
{
  downloadas.Visible = true; //my progressbar
  downloadas.Maximum = dataSet1.Tables["duomenys"].Rows.Count;

  using (DbCommand cmd = kaupykliuduomConn.CreateCommand())
  {
    cmd.CommandText = "INSERT INTO duomenys(Barkodas, Preke, kiekis) VALUES(?,?,?)";
    DbParameter Field1 = cmd.CreateParameter();
    DbParameter Field2 = cmd.CreateParameter();
    DbParameter Field3 = cmd.CreateParameter();
    cmd.Parameters.Add(Field1);
    cmd.Parameters.Add(Field2);
    cmd.Parameters.Add(Field3);

    while (n != dataSet1.Tables["duomenys"].Rows.Count)
    {
      Field1.Value = dataSet1.Tables["duomenys"].Rows[n]["Barkodas"].ToString();
      Field2.Value = dataSet1.Tables["duomenys"].Rows[n]["Preke"].ToString();
      Field3.Value = dataSet1.Tables["duomenys"].Rows[n]["kiekis"].ToString();
      downloadas.Value = n;
      n++;
      cmd.ExecuteNonQuery();
    }
  }
  dbTrans.Commit();
}

在这种情况下,dataSet1.Tables["duomenys"] 已经充满了我需要传输到另一个数据库的所有数据。我也使用循环来填充数据集。

最佳答案

  • 当您从源数据库加载 DataTable 时,将数据适配器的 AcceptChangesDuringFill 属性设置为 false,以便加载的记录保存在 Added状态(假设源数据库是SQL Server)

    var sqlAdapter = new SqlDataAdapter("SELECT * FROM the_table", sqlConnection);
    DataTable table = new DataTable();
    sqlAdapter.AcceptChangesDuringFill = false;
    sqlAdapter.Fill(table);
    
  • 直接使用 SQLiteCommand.ExecuteNonQuery

    执行 CREATE TABLE 语句,在 SQLite 数据库中创建表
  • 为 SQLite 数据库连接创建一个新的 DataAdapter,并使用它来更新数据库:

    var sqliteAdapter = new SQLiteDataAdapter("SELECT * FROM the_table", sqliteConnection);
    var cmdBuilder = new SQLiteCommandBuilder(sqliteAdapter);
    sqliteAdapter.Update(table);
    

如果源表和目标表具有相同的列名和兼容的类型,它应该可以正常工作...

关于c# - SQLite,将数据集/数据表复制到数据库文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282209/

相关文章:

c# - 如何在c#中动态删除一个文件?

c# - 无法提升具有 IsolationLevel 快照的事务

PHP 和 DB 连接与 mysqli

mysql - 嵌套查询的性能

具有多个 SQL 语句 : $db->Query() works, $this->db_sqlite->query() 的 PHP/SQLite 失败

c# - ListView Cell Translation 操作会影响其他单元格

c# - 带有 IIS 的 Kestrel - 运行时缺少 libuv.dll

php - 查找 MAX AVG 的 SQL 请求

java - 从条形码扫描仪应用程序访问数据以在 SQLite 查询中使用

Android:随着时间的推移将数据库加载到内存与查询