注册

net DmBulkCopy导入报错:Attempted to read or write protected memory.

-zhou- 2022/11/24 1828 1 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: dm8_20221027_x86_win_64_ent
【操作系统】:Windows 10 专业版 20H2
【CPU】:X86
【问题描述】*:net6.0 DmBulkCopy导入报错:
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

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
image.png

尝试了组件 dmdbms.DmProvider 1.1.3

  <ItemGroup>
    <PackageReference Include="dmdbms.DmProvider" Version="1.1.3" />
  </ItemGroup>

尝试了DmProvider.1.1.0.12848
image.png

  <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);//写入到数据库中
}

最后全部报这个错误
image.png

回答 0
暂无回答
扫一扫
联系客服