Repeat 2 times:
at Dm.DmFldrDllCall.fldr_provider_get_err(IntPtr, Int32, Int32 ByRef, IntPtr ByRef)
at Dm.DmFldrDllCall.GetError(IntPtr, Int32 ByRef, System.String ByRef)
at Dm.DmFldrDllCall.CheckTable(IntPtr, Int32)
at Dm.DmFldr.Initilize(Dm.DmConnProperty, System.String, Dm.DmBulkCopyOptions, Int32, System.Data.DataTable)
at Dm.DmBulkCopy.WriteToServer(System.Data.DataTable)
at DMDemo.Demo.fun_bulk(Dm.DmConnection)
at DMDemo.Demo.Main(System.String[])
已经添加环境变量:F:\dmdbms\drivers\fldr
尝试了组件 dmdbms.DmProvider 1.1.3
<ItemGroup>
<PackageReference Include="dmdbms.DmProvider" Version="1.1.3" />
</ItemGroup>
尝试了DmProvider.1.1.0.12848
<ItemGroup>
<PackageReference Include="DmProvider" Version="1.1.0.12848" />
</ItemGroup>
测试代码:
static void Main(string[] args)
{
var builder = new DmConnectionStringBuilder
{
Server = "localhost",
Port = 5236,
User = "TEST",
Password = "123456789"
};
DmConnection conn = new DmConnection();
try
{
conn.ConnectionString = builder.ConnectionString;//需要指定ENCODING
conn.Open();
}
catch (Exception ex)
{
Console.WriteLine("连接数据库失败");
Console.WriteLine(ex.Message);
}
//批量插入
fun_bulk(conn);
conn.Close();
}
static void fun_bulk(DmConnection conn)
{
//准备批量插入的数据
DataTable table = new DataTable();
table.Columns.Add("region_id");
table.Columns.Add("city_name");
DataRow row = table.NewRow();
row["region_id"] = 8;
row["city_name"] = "天津";
table.Rows.Add(row);
DataRow row1 = table.NewRow();
row1["region_id"] = 9;
row1["city_name"] = "杭州";
table.Rows.Add(row1);
var bulkCopy = new DmBulkCopy(conn);
bulkCopy.DestinationTableName = "city";//在插入的目标表
//DataTable列名与数据库列名的映射
bulkCopy.ColumnMappings.Add("region_id", "region_id");
bulkCopy.ColumnMappings.Add("city_name", "city_name");
bulkCopy.WriteToServer(table);//写入到数据库中
}
最后全部报这个错误
在查阅达梦技术文档中看到dmfldr入门,发现DmBulkCopy使用就是这个功能,添加环境变量也是这个原因。发现命令都是正常的说明不是组件的问题,最后发现表有自增主键,但是在批量导入是没有给自增主键赋值,导致报错无法导入。删除自增主键或给自增主键赋值导入成功! 这个批量导入功能必须要给所有的字段赋值少一个字段都会包上面的错误。吐槽一下这个错误提示太误导人了