为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
DM Database Server x64 V7.6.1.60-Build(2020.06.02-122414)ENT
DB Version: 0x7000a
【操作系统】:
数据库所在——中标麒麟(等价于Centos7)
使用DmBulkCopy的站点——中标麒麟(等价于Centos7)
【CPU】:
【问题描述】*:
首先,我使用的是.net 5.0。最终产品会发布在麒麟中标系统上(即达梦数据库和站点都会部署在麒麟中标系统)
按您邮件中的提示,我使用了DmBulkCopy,但在使用过程中出现了如下错误
这里代码是这样写的
bulkCopy.DestinationTableName = dt.TableName;
为了解决这个问题,我将代码改为这样
bulkCopy.DestinationTableName = “\”" + dt.TableName + “\”";
然后得到了这样的错误:
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)
您看我还能如何解决问题,期待您的回复
代码像这样:
首先放一下加上用户名之后的两种写法的不同表现
至于上图提到的空引用问题图如下:
然后就是确认表有没有问题的图:
可以从上图看出,用这个在管理器里查询能出结果。
接下来再看代码:
至此应该可以确认表明没问题了吧
完了,我感觉我这问题估计就这么沉了
如果你使用的是 SYSDBA 进行登录 那这个地方
“SYSDBA.” 可以不需要,直接使用表名,可以不用""包起来,这样你的转义操作都可以不需要。
向这样执行都是 ok 的。
你要确认一下你的程序中用哪个账号连接的达梦数据库,只有用SYSDBA用户连接数据库,才能访问SYSDBA模式下的表
社区里的大佬们能联系一下使用DllImport技术将dmfldr_dll.dll封装到DmProvider的团队吗?现在遇到一个批量导入数据,对性能要求很高。常规的insert无法满足要求,只能寄希望于DmBulkCopy了。要是DmBulkCopy这条路走不通,就只能不依赖达梦处理这样的逻辑了
您好 我这边根据您提供的脚本模拟定位了一下 发现是表名大小写的问题
解决问题的两种方法:
方法1.连接时设置对象大写(粗体部分)(这样会建立大写的表):
static IFreeSql _FreeSqlInstance = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Dameng, “server=127.0.0.1; port=51236;user id=SYSDBA;PWD=SYSDBA”)
.UseAutoSyncStructure(true) //自动创建、迁移实体表结构
.UseSyncStructureToUpper(true)
.UseMonitorCommand(cmd => Console.WriteLine($“线程:{cmd.CommandText}\r\n”))
.Build();
方法2.使用小写表名,表名添加双引号(原脚本写法有出入):
bulkCopy.DestinationTableName = “”" + dt.TableName + “”";
两种方法均通过了测试。后续有问题,欢迎继续沟通。
另外,接口开发人员表示,.net5.0相关的支持还没有正式发布。
方法2代码网页显示有误了,实际应该是:
瞄了一圈回答,这里的blkup是不建议使用的,
批量插入提交的效率不会比您们常用的blkup慢的。这是应该是目前dmprovider建议的使用方式。
另外,我们也可以像oracle那样按列绑定,别纠结了blkup的问题(;p 抛弃他,效率满足才是目标)。
我的执行时报异常,异常信息为空串。
另外,你们怎么拷贝的dmfldr_dll.dll文件?我是把drivers\fldr下所有文件复制到exe同级目录了。
一样的问题,真是无解了,官方就不能出个样例吗
使用这句代码时
bulkCopy.DestinationTableName = dt.TableName;
会出的错长这样(本来是一个截图,结果粘不上来):
获取表信息失败
对象不存在
一般错误
我已经确认了表名没有问题