我正在使用SQL Server Compact Edition。
我有一个FOR循环来构建我的查询以插入数据,所以我从一个完整的SQL Server下载3000行。
我需要将这3000行插入到SQL Server Compact Edition中,目前我为每一行都插入一个需要大量时间的插入。我需要为12个表做这个,这需要很长时间......我需要一个更快的方法在不到5分钟内完成这个...
你知道在SQL Server Compact上插入大量行的方法吗?
我尝试在五十岁时插入五十,但我得到了一个错误......
insert into table(col1,col2)
values (val1,valo2) ;
insert into table(col1,col2)
values (val1,valo2)
我在2次插入时出错(因此无法进行50次插入),
是否可以在SQL Server Compact Edition中执行OPENROWSET
?
我的问题
如何在SQL Server Compact Edition数据库中插入大量行?
我从一个完整的SQL Server数据库中获取这些数据。
答案 0 :(得分:3)
你知道在sql compact上插入很多行的方法吗?
请参阅下面的我认为最佳解决方案,但如果您不喜欢它(无论出于何种原因)和您的源数据库是SQL Server,您可以考虑在SQL中创建链接服务器服务器到您的压缩数据库并让SQL Server插入记录。根据我的经验,SQL Server很快就会插入到任意数据库中。
.NET库,用于快速(执行批量插入)将数据加载到SQL Server Compact数据库文件中。尝试模仿SQLClient SqlBulkCopy API。
测试的一些时间 - 加载2列表而没有约束/索引:
1,000,000行:6秒= 166,666行/秒
5,000,000行:28秒= 178,000行/秒
private static void DoBulkCopy(bool keepNulls, IDataReader reader)
{
SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions();
if (keepNulls)
{
options = options |= SqlCeBulkCopyOptions.KeepNulls;
}
using (SqlCeBulkCopy bc = new SqlCeBulkCopy(connectionString, options))
{
bc.DestinationTableName = "tblDoctor";
bc.WriteToServer(reader);
}
}
答案 1 :(得分:1)
使用纯SQL语句将12行插入12个表应该不到一秒钟。如果您遇到错误,或者需要几分钟,那么您做错了什么。这是一项非常基本的任务,如果您遇到错误,应该找出问题所在,不要尝试使用不同的工具。
使用C#将记录插入SQL CE数据库的最简单方法是使用ADO.NET。以下是使用参数化查询的示例:
using (var conn = new SqlCeConnection(YourCommandString))
{
var cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO table (col1,col2) VALUES (@val1,@val2)";
var param1 = cmd.CreateParameter();
param1.ParameterName = "@val1";
// assign col1 types, constraints, lengths here.
cmd.Parameters.Add(param1);
var param2 = cmd.CreateParameter();
param2.ParameterName = "@val2";
// assign col2 types, constraints, lengths here.
cmd.Parameters.Add(param2);
cmd.Prepare();
conn.Open();
foreach (var s in sourceDataStructure)
{
param1.Value = s.sourceValue1;
param2.Value = s.sourceValue2;
cmd.ExecuteNonQuery();
}
cmd.Dispose();
}
如果你不知道参数化查询是什么,你应该学习。