达梦数据闸连接问题 返回

SqlSugar 沟通中
14 452

我两个环境,一个是公司的达梦库,另外一个是客户现场的达梦库,但是客户现场的达梦库连接一直有问题,我写了一个测试程序,如果是用达梦本身的写法可以连接,但是用Sqlsugar的链接会报错;我写了一个测试程序,分别放3个按钮,第1个按钮,第2个按钮都使用原生的写法可以连接达梦数据库(公司环境也可以,达梦环境也可以),但是第三个按钮事件在公司库可以,在客户现场不行;

        private void button1_Click(object sender, EventArgs e)

        {

            try

            {

                // 连接测试

                DmConnection conn = new DmConnection();

                conn.ConnectionString = textBox1.Text;

                conn.Open();

                Console.WriteLine("dmprovider: connect success!");

                conn.Close();

                MessageBox.Show("连接成功!");

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

                //Console.WriteLine(ex.Message);

            }

        }


        private void button2_Click(object sender, EventArgs e)

        {

            // 达梦数据库连接字符串

            string connStr = textBox1.Text;


            // SQL 语句(可替换为你的查询语句)

            string sql = "SELECT * FROM EMR_TPL_INDEX;";


            DataSet ds = new DataSet();


            // 建立连接并执行查询

            using (DmConnection conn = new DmConnection(connStr))

            {

                try

                {

                    conn.Open(); // 打开连接


                    // 创建数据适配器

                    using (DmDataAdapter adapter = new DmDataAdapter(sql, conn))

                    {

                        // 填充 DataSet(可指定表名,默认是 Table)

                        adapter.Fill(ds, "ResultTable");

                    }


                    // 处理结果

                    if (ds.Tables.Count > 0)

                    {

                        //DataTable dt = ds.Tables["ResultTable"];

                        ////Console.WriteLine($"查询到 {dt.Rows.Count} 条数据");

                        //// 遍历数据示例

                        //foreach (DataRow row in dt.Rows)

                        //{

                        //    Console.WriteLine(row["COLUMN_NAME"]); // 替换为实际列名

                        //}

                    }

                    MessageBox.Show("查询成功!");

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message);

                    //Console.WriteLine("错误:" + ex.Message);

                }

                finally

                {

                    if (conn.State == ConnectionState.Open)

                        conn.Close();

                }

            }

        }


        private void button3_Click(object sender, EventArgs e)

        {

            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()

            {

                DbType = DbType.Dm,

                ConnectionString = textBox1.Text,

                IsAutoCloseConnection = true,

                MoreSettings = new ConnMoreSettings()

                {

                    IsAutoToUpper = false //禁用自动转成大写表 5.1.3.41-preview04

                }

            });

            var list = db.DbMaintenance.GetColumnInfosByTableName("TPL_INDEX");

            foreach (var item in list) 

            {


            }

            MessageBox.Show("SqlSugar查询成功!");

        }

这是一个错误的大概日志:

日志时间:2025-10-19 22:40:56

日志类型:普通消息

信息:SqlSugar.SqlSugarException: 中文提示 :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:6001,[10.117.14.1:14236 (UNKNOW, UNKNOW)]Fail to establish connection

DbType="Dm";ConfigId="".

English Message : Connection open error . 6001,[192.168.1.110:14236 (UNKNOW, UNKNOW)]Fail to establish connection

DbType="Dm";ConfigId="" 

   在 SqlSugar.Check.Exception(Boolean isException, String message, String[] args)

   在 SqlSugar.AdoProvider.CheckConnection()

   在 SqlSugar.DmProvider.GetCommand(String sql, SugarParameter[] parameters)

   在 SqlSugar.AdoProvider.GetDataSetAll(String sql, SugarParameter[] parameters)

   在 SqlSugar.AdoProvider.GetDataTable(String sql, SugarParameter[] parameters)

   在 OMS.DataTool.Client.Extention.CDbExtention.GetMyTablePrimaryKeyList(SqlSugarClient db, String tableName)

   在 OMS.DataTool.Client.FrmInOrOutInitData.RemoveRowsWithExistingKeys(DataTable importDt, SqlSugarClient db)

   在 OMS.DataTool.Client.FrmInOrOutInitData.StartImportData(DataTable dataTable)

   在 OMS.DataTool.Client.FrmInOrOutInitData.DoImportData(List`1 listTableName)

   在 OMS.DataTool.Client.FrmInOrOutInitData.<>c__DisplayClass48_0.<BtnSelectImprt_Click>b__0()

   在 System.Threading.Tasks.Task`1.InnerInvoke()

   在 System.Threading.Tasks.Task.Execute()


热忱回答14

  • 我用的是winform写的程序,.net framework 4.8

    0 回复
  • fate sta fate sta VIP0
    1个月前

       在 System.Threading.Tasks.Task.Execute()

    明显用到线程了,你给的代码都没写用到线程。

    0 回复
  • fate sta fate sta VIP0
    1个月前


    db.Ado.GetDataTable(sql); 等比测试应该是这样吧

    0 回复
  • fate sta fate sta VIP0
    1个月前

    还有疑问提供一个DEMO


    一个ADO的按钮,一个达梦按钮能重现的

    0 回复
  • 不是,错误日志是我之前的,我重新将错误日志写出,

    SqlSugar.SqlSugarException: 中文提示 :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:6001,[10.117.14.1:14236 (UNKNOW, UNKNOW)]Fail to establish connection

    DbType="Dm";ConfigId="".

    English Message : Connection open error . 6001,[192.168.1.110:14236 (UNKNOW, UNKNOW)]Fail to establish connection

    DbType="Dm";ConfigId="" 

       在 SqlSugar.Check.Exception(Boolean isException, String message, String[] args)

       在 SqlSugar.AdoProvider.CheckConnection()

       在 SqlSugar.DmProvider.GetCommand(String sql, SugarParameter[] parameters)

       在 SqlSugar.AdoProvider.GetDataReader(String sql, SugarParameter[] parameters)

       在 SqlSugar.DmDbMaintenance.GetColumnInfosByTableName(String tableName)

       在 SqlSugar.DmDbMaintenance.<>c__DisplayClass81_0.<GetColumnInfosByTableName>b__0()

       在 SqlSugar.ReflectionInoCore`1.GetOrCreate(String cacheKey, Func`1 create)

       在 SqlSugar.ReflectionInoCacheService.GetOrCreate[V](String cacheKey, Func`1 create, Int32 cacheDurationInSeconds)

       在 SqlSugar.DmDbMaintenance.GetColumnInfosByTableName(String tableName, Boolean isCache)

       在 WindowsFormsApp4._8.Form1.button3_Click(Object sender, EventArgs e)


    0 回复
  • WindowsFormsApp4.8.zip

    第三个按钮 “异常按钮”

    0 回复
  • 有异常的达梦库版本号:--03134284368-20250930-295459-20149 Pack37;

    不会有异常的达梦库版本号:--03134284368-20250430-272000-20149 Pack1

    0 回复
  • fate sta fate sta VIP0
    1个月前

    你DEMO写的例子都不一样

    0 回复
  • fate sta fate sta VIP0
    1个月前

    这样才一样

    image.png

    0 回复
  • 就是这个地方在202509的达梦版本中会报错

    0 回复
  • fate sta fate sta VIP0
    1个月前
            private void button3_Click(object sender, EventArgs e)
            {
                try
                {
                    using (DmConnection conn = new DmConnection(textBox1.Text))
                    { 
                        SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                        {
                            DbType = DbType.Dm,
                            ConnectionString = textBox1.Text,
                            IsAutoCloseConnection = true,
                            MoreSettings = new ConnMoreSettings()
                            {
                                IsAutoToUpper = false //禁用自动转成大写表 5.1.3.41-preview04
                            }
                        });
                        // SQL 语句(可替换为你的查询语句)
                        string sql = "SELECT * FROM EMR_TPL_INDEX;";
                        db.Ado.Connection = conn;
                        conn.Open();
                        var list = db.Ado.GetDataSetAll(sql); 
                        MessageBox.Show("SqlSugar查询成功!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    Write(ex.ToString());
                }
            }

    改成这样试一下哪行代码了错

    0 回复
  • 这个代码运行可以成功,没有报错

    image.png

    0 回复
  • fate sta fate sta VIP0
    1个月前
      private void button3_Click(object sender, EventArgs e)
            {
                try
                {
                    
                        SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
                        {
                            DbType = DbType.Dm,
                            ConnectionString = textBox1.Text,
                            IsAutoCloseConnection = true,
                            MoreSettings = new ConnMoreSettings()
                            {
                                IsAutoToUpper = false //禁用自动转成大写表 5.1.3.41-preview04
                            }
                        });
                        // SQL 语句(可替换为你的查询语句)
                        string sql = "SELECT * FROM EMR_TPL_INDEX;"
                        var list = db.Ado.GetDataSetAll(sql); 
                        MessageBox.Show("SqlSugar查询成功!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    Write(ex.ToString());
                }
            }

    这样呢

    0 回复
  • fate sta fate sta VIP0
    1个月前

    你这个问题好像以前有人遇到过。是安装的达梦要替换个DLL记得。


    实在不行就改成


    db.ado.connection=new dmconnection这种方式

    0 回复