人大金仓 .NET 操作数据库


SqlSugar和人大金仓官方深度整合,SqlSugar在人大金仓是最好的,不光光C#最好,所有语言中是最好的,并且支持Oracle模式的存储过程和游标等。

并且可以有官方的支持,.NET下人大金仓整合最好的ORM

1、Nuget安装ORM

SqlSugarCore
//SqlServer模式需要独立安装最新版本驱动
//SqlSugarCore.Kdbndp 9.3.6.719

2、数据库版本

每个版本都有些注意点,有些需要提定一下模式,有些需要升级一下nuget

//可以查看安装的模式
show database_mode;

//查看版本号
SELECT version();

R3(比较老版本)

R3用法如下

    SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()
    {
        DbType = DbType.Kdbndp,
        ConnectionString = "Server=127.0.0.1;Port=54321;UID=system;PWD=123;database=test",
        InitKeyType = InitKeyType.Attribute,
        IsAutoCloseConnection = true, 
    }, db =>
    {
        db.Aop.OnExecutingChangeSql = (s, p) =>
        {
            s = s.Replace("pg_catalog.", "");//R3比较老和高版本有些函数冲突需要加替换
            return new KeyValuePair<string, SugarParameter[]>(s, p);
        };
                
    });

R6:Oracle模式(推荐默认 )

 直接安装 和使用 ,兼容PG语法(推荐 )

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
    DbType = DbType.Kdbndp,
    ConnectionString ="Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1", 
    IsAutoCloseConnection = true
})

R6:MySql模式  (需配置)

升级到 5.1.4.152+

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
    DbType = DbType.Kdbndp,
    ConnectionString ="Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1", 
    IsAutoCloseConnection = true, 
    MoreSettings=new ConnMoreSettings()
    { 
        //SqlSugarCore  升级到 5.1.4.152 +
        DatabaseModel= DbType.MySql//配置MySql模式主要是兼容系统表差异
    }
})

R6:PostgreSQL模式(需配置)

配置一下pg模式如下

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
    DbType = DbType.Kdbndp,
    ConnectionString ="Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1", 
    IsAutoCloseConnection = true, 
    MoreSettings=new ConnMoreSettings()
    { 
        //SqlSugarCore  升级到 5.1.4.146 +
        DatabaseModel= DbType.PostgreSQL//配置PG模式主要是兼容系统表差异
    }
})

R6:SqlServer模式(需配置)

现在还在内测中

24年5月以后的安装文需要升级到 SqlSugar 5.1.4.161+

24年5月之前的数据库用 5.1.4.160及以下版本

SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
    DbType = DbType.Kdbndp,
    ConnectionString ="Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1", 
    IsAutoCloseConnection = true, 
    MoreSettings=new ConnMoreSettings()
    { 
       //SqlSugarCore 升级到 5.1.4.146 +
       DatabaseModel= DbType.SqlServer//配置SqlServer模式主要是兼容CodeFirst报错
       
      //该模式下已知问题:   
      //SqlServer模式下不支持Date类型请使用DateTime类型
      //时间.Date==时间.Date要改成it.时间.ToString("yyyy-MM-dd")==时间.ToString("yyyy-MM-dd")
    }
})

//SqlServer模式需要独立安装最新版本驱动
//SqlSugarCore.Kdbndp 9.3.6.719

3、表模式

2种模式用法小有区别,推荐规范表

1. 规范表: 自动转大写  

2. 驼峰表: 不自动转大写

规范(自动转大写) 

表名 STUDENT  字段 ID  NAME   ,直接用就行了SqlSugar不需要设置

 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 {
       DbType = DbType.Kdbndp,
       ConnectionString ="Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1",
       IsAutoCloseConnection = true
 });
  //自动生成下划线看PostgreSQL文档用法差不多

不规范(不转换大写)

 需要配置禁用转大写

 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 {
       DbType = DbType.Kdbndp,
       ConnectionString = "Server=127.0.0.1;Port=54321;UID=SYSTEM;PWD=system;database=SQLSUGAR4XTEST1",
       IsAutoCloseConnection = true,
       MoreSettings=new ConnMoreSettings() { 
           IsAutoToUpper=false //禁用自动转成大写表 5.1.3.41-preview08
       }
   });
  //注意:请升级到 5.1.3.41-preview08 以上版本

4、人大金仓优点

 基本上和PgSql一模一样更贴近开发功能也继承了pgsql所有功能,对开发人员比较友好

5、操作人大金仓数据库

 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 {
            ConnectionString = "Server=.xxxxx",//连接符字串
            DbType = DbType.Kdbndp, //数据库类型
            IsAutoCloseConnection = true //不设成true要手动close
 });

查询

db.Queryable<Student>().ToList()//查询所有
db.Queryable<Student>().Where(it=>it.Id==1).ToList()//根据条件查询

//分页  int pageIndex = 1; // pageindex是从1开始的不是从零开始的
  int pageSize = 20;
  int totalCount=0;
  //单表分页
  var page = db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount);

插入

//返回插入行数
db.Insertable(insertObj).ExecuteCommand(); //都是参数化实现 
//插入返回自增列
db.Insertable(insertObj).ExecuteReturnIdentity(); 
//返回雪花ID 看文档3.1具体用法(在最底部)
long id= db.Insertable(实体).ExecuteReturnSnowflakeId();

更多用法看左边菜单

6、架构支持 schema(非Public)

5.1.3.35-preview19 +

连接字符串上加上 searchpath=架构名  ,可以支持多架构

7、字符串空判段问题

XI(LJ0SUBJ_R%(BO1(TTGEH.png

8、.NET Framework用户dll

需要引用的dll ,官方定制比外面找的dll更加强大  ( .NET Core用户直接安装SqlSugarCore就可以了)

Kdbndp_dll.rar

9、查看安装的模式

show database_mode;

//查看版本号
SELECT version();

10、游标参数

升级:SqlSugarCore 5.1.4.149+

//1.字符串加上
;CursorAsDataRead=True

//2.具体用法
var p = new SugarParameter("@outcursor", null)
{ 
   IsRefCursor = true,
   Direction = System.Data.ParameterDirection.Output 
};
db.Ado.UseStoredProcedure().ExecuteCommand("cs_20240312",p );
Console.WriteLine(p.Value);

11、数组类型

text[]  int4[] 这种组合类型

//实体
SugarColums(IsArray=true)
//Sql参数
new SugarParameter("Names",array){ IsArray=true }

12、Json类型

json或者jsonb

//实体
SugarColums(IsJson=true)
//Sql参数
new SugarParameter("Names",json){ IsJson=true }

13、sm3加密协议

独立安装最新预览版本的 SqlSugarCore.Kdbndp

SqlSugraCore 5.1.4.160+

14、常见问题

 14.1 sys_config 表名冲突

 千万不要用Sys__Config这个表名,和系统表冲突了 , 避免 sys_和 pg_ 开头

 14.2 sys_user 表名冲突

 千万不要用Sys_user这个表名,和系统表冲突了 , 避免 sys_和 pg_ 开头

 14.2 string ==""无效

oracle模式下没空只有null, 多库用户可以配置一下off参数

ora_input_emptystr_isnull = off  这个参数放到,kingbase.conf的结尾就可以。
关闭
果糖网