批量导入¶
OscarImportHandler 对象提供了快速的大容量数据导入功能.该对象执行的 insert bulk 协议,可以将数据以二进制流的形式导入到神通数据库中.在性能与健壮性方面,insert bulk 协议比旧的import协议有了很大的提高,并且执行insert bulk 协议导入的数据可以自动维护索引,检查约束等.建议用户优先使用 OscarImportHandler 对象来进行大容量数据的导入.
OscarImportHandler 对象提供了三个重载的 ExecuteImport
方法以执行导入数据的操作,返回结果为导入数据的行数.
构造函数中可以通过给定表名,模式名,或者 TABLEOID 进行指定数据表来操作.
SQL
create table if not exists ImportTest(Id int,Name varchar(64));
示例 1
[TestMethod]
public void TestMethodOscarImportCommand1()
{
try
{
using (var importCommand = _connect.CreateImportHandler("ImportTest"))
{
for (var i = 1; i <= 10000; i++)
{
importCommand.SetInt(0, i);
importCommand.SetString(1, i.ToString());
importCommand.EndRow();
}
importCommand.ExecuteImport();
}
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
}
[TestMethod]
public void TestMethodOscarImportHandler()
{
try
{
using (var importCommand = new OscarImportHandler(_connect, "ImportTest"))
{
for (var i = 1; i <= 10000; i++)
{
importCommand.SetInt(0, i);
importCommand.SetString(1, i.ToString());
importCommand.EndRow();
}
importCommand.ExecuteImport();
}
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
}
[TestMethod]
public void TestMethodOscarImportHandler1()
{
try
{
using (var importCommand = new OscarImportHandler(_connect, "ImportTest"))
{
for (var i = 1; i <= 10000; i++)
{
importCommand.AddRow(new object[] { i, i.ToString() });
}
importCommand.ExecuteImport();
}
}
catch (Exception ex)
{
Assert.Fail(ex.Message);
}
}
扩展
public sealed class OscarConnection
{
...
public OscarImportHandler CreateImportHandler(string tableName);
public OscarImportHandler CreateImportHandler(string schemaName, string tableName);
...
}
继承
OscarImportHandler 继承 IDisposable
引用