.NET

DmException: 试图在只读事务中修改数据

达梦数据库的事务隔离级分为四级,默认是“读提交隔离级”。
可以检查一下是否设置了隔离级别为“只读事务”。
更多关于达梦数据库的事务隔离级,请参考安装目录DOC目录下的 “系统管理员手册”--第19章节 管理事务。

.NET 程序中使用 DmBulkCopy 对象执行时报错

【问题描述】:
.NET 程序中使用 DmBulkCopy 对象执行时报错:
报错信息

Unhandled exception. Dm.DmException (0x80004005): The fastloading dll not loading!
   at Dm.DmFldr.Initilize(DmConnProperty props, String desttable, DmBulkCopyOptions op, Int32 rows, DataTable table)
   at Dm.DmBulkCopy.WriteToServer(DataTable table)

【问题分析】:
DmBulkCopy 对象用于快速批量装载数据。实现 IDisposable 接口。该功能依赖 DM 安装目录 \bin 下的 dmfldr_dll.dll 等动态链接库,需要拷贝到应用程序的执行目录。

驱动文档里的说明:
DmProvider 文件夹中是完整的 DmProvider 驱动文件。使用 DmProvider 的DmBulkCopy 对象,需要引用 dmfldr_dll.dll 以及此 dll 依赖的其他库。

添加 dmfldr_dll.dll 引用时会报错,这种方法无效。
报错信息
报错信息

代码示例:
//数据库中建表
create table Person(Age varchar(100),Name varchar(100));
//
using System;
using Dm;
using System.Data;

namespace dm_net_demo
{
    class Program
    {
        static void Main(string[] args)
        {
            DmConnection conn = new DmConnection();
            try
            {
                conn.ConnectionString = "SERVER=localhost;PORT=5236;USER=SYSDBA;PASSWORD=SYSDBA;ENCODING=UTF-8";//需要指定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("Age");
            table.Columns.Add("Name");
            DataRow row = table.NewRow();
            row["Age"] = 28;
            row["Name"] = "Jack";
            table.Rows.Add(row);
            DataRow row1 = table.NewRow();
            row1["Age"] = 29;
            row1["Name"] = "Fei";
            table.Rows.Add(row1);
            var bulkCopy = new DmBulkCopy(conn);
            bulkCopy.DestinationTableName = "Person";//在插入的目标表
            //DataTable列名与数据库列名的映射
            bulkCopy.ColumnMappings.Add("Age", "Age");
            bulkCopy.ColumnMappings.Add("Name", "Name");
            bulkCopy.WriteToServer(table);//写入到数据库中
        }
    }
}

【问题解答】

在 Path 环境变量里面加上达梦的 bin 目录:

Path路径

.net程序服务名连接达梦集群,备机异常时,连接异常变慢

在dm_svc.conf中配置连接超时参数connnectTimeout,可配置为connnectTimeout=(3)

微信扫码
分享文档
扫一扫
联系客服