Tom*_*mix 4 c# database sqlite datatable dataset
我已经使用从另一个数据库文件创建的表填充了DataSet .该表不在数据库文件中,我希望能够将表复制到.
现在我想将所有这些记录(DataTable)保存到新创建的SQLite数据库文件中......
我怎样才能做到这一点?
如果可能的话,我真的想避免循环.
最好的答案是由我:)所以我会分享它.这是循环,但在2-3secs写入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();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,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);
Run Code Online (Sandbox Code Playgroud)通过CREATE TABLE
直接执行语句,在SQLite数据库中创建表SQLiteCommand.ExecuteNonQuery
DataAdapter
为SQLite数据库连接创建一个新的,并将其用于Update
db:
var sqliteAdapter = new SQLiteDataAdapter("SELECT * FROM the_table", sqliteConnection);
var cmdBuilder = new SQLiteCommandBuilder(sqliteAdapter);
sqliteAdapter.Update(table);
Run Code Online (Sandbox Code Playgroud)如果源表和目标表具有相同的列名和兼容类型,它应该可以正常工作...
导入SQL
数据的方式SQLite
需要很长时间.如果要以数百万的形式导入数据,则需要花费大量时间.因此,最简单和最简单的方法是在a中填充从SQL数据库获取数据DataTable
并将其所有行插入SQLite
数据库.
public bool ImportDataToSQLiteDatabase(string Proc, string SQLiteDatabase, params object[] obj)
{
DataTable result = null;
SqlConnection conn = null;
SqlCommand cmd = null;
try
{
result = new DataTable();
using (conn = new SqlConnection(ConStr))
{
using (cmd = CreateCommand(Proc, CommandType.StoredProcedure, obj))
{
cmd.Connection = conn;
conn.Open();
result.Load(cmd.ExecuteReader());
}
}
using (SQLiteConnection con = new SQLiteConnection(string.Format("Data Source={0};Version=3;New=False;Compress=True;Max Pool Size=100;", SQLiteDatabase)))
{
con.Open();
using (SQLiteTransaction transaction = con.BeginTransaction())
{
foreach (DataRow row in result.Rows)
{
using (SQLiteCommand sqlitecommand = new SQLiteCommand("insert into table(fh,ch,mt,pn) values ('" + Convert.ToString(row[0]) + "','" + Convert.ToString(row[1]) + "','"
+ Convert.ToString(row[2]) + "','" + Convert.ToString(row[3]) + "')", con))
{
sqlitecommand.ExecuteNonQuery();
}
}
transaction.Commit();
new General().WriteApplicationLog("Data successfully imported.");
return true;
}
}
}
catch (Exception ex)
{
result = null;
return false;
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
与上面给出的答案相比,这将花费很短的时间.
归档时间: |
|
查看次数: |
23212 次 |
最近记录: |