SQL Server Compact快速插入数据信息?c#

SQL Server Compact快速插入数据信息?c#,sql,sql-server-ce,Sql,Sql Server Ce,我使用的是SQL Server Compact Edition 我有一个FOR循环来构建我的查询以插入数据,所以我从一个成熟的SQL Server下载3000行 我需要将这3000行插入到SQL Server Compact Edition中,目前我为每一行插入一行,这需要很多时间。我需要为12张桌子做这个,这需要很长时间。。。我需要一个更快的方法在5分钟内完成这项工作 您知道在SQLServerCompact上插入大量行的方法吗 我试着做50对50的插入,但我得到了一个错误 insert in

我使用的是SQL Server Compact Edition

我有一个FOR循环来构建我的查询以插入数据,所以我从一个成熟的SQL Server下载3000行

我需要将这3000行插入到SQL Server Compact Edition中,目前我为每一行插入一行,这需要很多时间。我需要为12张桌子做这个,这需要很长时间。。。我需要一个更快的方法在5分钟内完成这项工作

您知道在SQLServerCompact上插入大量行的方法吗

我试着做50对50的插入,但我得到了一个错误

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数据库中获取这些数据

您知道在SQLCompact上插入大量行的方法吗

见下面是我认为最好的解决方案,但是如果您不喜欢它(无论出于什么原因),并且您的源数据库是SQL Server,您可以考虑将SQLServer中的链接服务器压缩到紧凑的数据库中,并允许SQLServer插入记录。根据我的经验,SQL Server可以很快地插入任意数据库

.NET库,用于将数据快速加载(执行大容量插入)到SQL Server Compact数据库文件中。尝试模拟SQLClient SqlBulkCopy API

测试中的一些计时-加载2列表,无约束/索引:

1000000行:6秒=166666行/秒
5000000行:28秒=178000行/秒

您知道在SQLCompact上插入大量行的方法吗

见下面是我认为最好的解决方案,但是如果您不喜欢它(无论出于什么原因),并且您的源数据库是SQL Server,您可以考虑将SQLServer中的链接服务器压缩到紧凑的数据库中,并允许SQLServer插入记录。根据我的经验,SQL Server可以很快地插入任意数据库

.NET库,用于将数据快速加载(执行大容量插入)到SQL Server Compact数据库文件中。尝试模拟SQLClient SqlBulkCopy API

测试中的一些计时-加载2列表,无约束/索引:

1000000行:6秒=166666行/秒
5000000行:28秒=178000行/秒


使用普通SQL语句将3000行插入到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();
}

如果您不知道参数化查询是什么,您应该学习。

使用普通SQL语句将3000行插入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();
}


如果你不知道参数化查询是什么,你应该学习。

你能考虑编辑吗?这不是全部思路?@辛基纳,我的问题是,我如何插入SQL紧凑的许多行?(我需要它是快速的)信息我将它与sql server连接(无压缩)sql CE可以轻松地快速插入50条记录,并且没有错误。请告诉我们您遇到了什么错误,以便我们了解发生了什么。上次我检查时,SQL CE不允许在一个命令中使用复合语句。通过一个命令,用多个语句分隔一个“;”,你就打破了。“DUR我把QueYes与“”分开了;当另一个插入语句开始时,我有错误可以考虑编辑,所以这不是全部思路吗?(我需要它是快速的)信息我将它与sql server连接(无压缩)sql CE可以轻松地快速插入50条记录,并且没有错误。请告诉我们您遇到了什么错误,以便我们了解发生了什么。上次我检查时,SQL CE不允许在一个命令中使用复合语句。如果一个命令中有多个语句用“;”分隔,那么你就破坏了它。@dour我用“;”分隔查询,当另一个插入语句从那里开始时,我就有了错误,这是什么意思??options=options |=SqlCeBulkCopyOptions.KeepNulls;该项目有自己的文档,但大体上它模仿了
SqlBulkCopy
API。因此,您可以在MSDN上查看预期行为:。@angeluc
a |=b
相当于
a=a | b
。再见,非常感谢,我等会再试试现在这么晚了。。我发现它非常有趣。我在bc.WriteToServer(datatable)上有一个错误(我正在使用datatable)。这就是错误:操作成功完成。这是什么意思??options=options |=SqlCeBulkCopyOptions.KeepNulls;该项目有自己的文档,但大体上它模仿了
SqlBulkCopy
API。因此,您可以在MSDN上查看预期行为:。@angeluc
a |=b
相当于
a=a | b
。再见,非常感谢,我等会再试试现在这么晚了。。我发现它非常有趣。我在bc.WriteToServer(datatable)上有一个错误(我正在使用datatable)。这是一个错误:操作已成功完成此行:param1.ParameterName=“@val2”;应为param2.ParameterName=“@val2”;否?/stimmt?此行:param1.ParameterName=“@val2”;应为param2.ParameterName=“@val2”;没有?