一个数据表,两列int,通过两种方式插入完全相同的50万行数据:
方式一:insert into
SqlCeCommand _Command=new SqlCeComman();
_Command.Connection=Connection;//我的数据库连接
for(int i=0;i<500000;i++)
{
string SQL=“insert into xx(id,content) values(”+i+","+i+")"; //xx是表名
_Command.CommandText=SQL;
_Command.ExecuteNonQuery();
}
方式二:SqlCeResultSet+SqlCeUpdatableRecord
string _SQL_Text = “select * from xx”;
SqlCeCommand _Command = new SqlCeCommand(_SQL_Text, Connection);
SqlCeResultSet _ResultSet= _Command.ExecuteResultSet(ResultSetOptions.Updatable | ResultSetOptions.Scrollable);
SqlCeUpdatableRecord _Record= _ResultSet.CreateRecord();
for (int i = 0; i < 500000; i++)
{
_Record.SetInt32(0, i);
_Record.SetInt32(1, i);
_ResultSet.Insert(_Record);
}
问题已解决,出在ResultSetOptions.Scrollable上,如果仅仅是插入数据,没必要加这个,它随着数据量增大会使速度急剧下降,最后还不如普通insert into,而且占用储存空间,不知道具体原因,可能原因参考第一条回答。多谢大家!
下面的方法相当于先插入默认数据,再修改。
而sqlce的修改,采用的是删除+重新插入 的方法,所以会产生存储碎片