分为大写和驼峰表2种模式,默认为大写表模式
表名 STUDENT 字段 ID NAME ,直接用就行了SqlSugar不需要设置
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Oracle, ConnectionString = "Data Source=localhost/orcl;User ID=system;Password=haha", IsAutoCloseConnection = true }); //自动生成下划线看PostgreSQL文档用法差不多
常见错误:ORA-00942: 表或视图不存在 , 出现这个错误是因为你数据库不是大写表,下面可以配置禁止转大写
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Oracle, ConnectionString = "Data Source=localhost/orcl;User ID=system;Password=haha", IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { IsAutoToUpper=false //是否转大写,默认是转大写的可以禁止转大写 });
表名 Student 字段 Id Name ,需要禁用自动转大写
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Oracle, ConnectionString = "Data Source=localhost/orcl;User ID=system;Password=haha", IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { IsAutoToUpper=false //禁用自动转成大写表 5.1.3.41-preview04 } }); //注意:请升级到 5.1.3.41-preview04 以上版本
因为Oracle12C以下不支持自增列,所以我们需要使用序列来实现自增列
//数据库创建序列 create sequence SEQ_ID minvalue 1 maxvalue 99999999 start with 1 increment by 1 nocache order; //实体类 public class OrderItem { //给序列赋值 现在我们就可以实现自增列 [SqlSugar.SugarColumn(IsPrimaryKey =true, OracleSequenceName = "SEQ_ID")] public int ItemId { get; set; } public int OrderId { get; set; } public decimal? Price { get; set; } [SqlSugar.SugarColumn(IsNullable = true)] public DateTime? CreateTime { get; set; } } //插入的时候ItemId 不需你去赋值,ORM会自已处理,也可以插成功后返回自增值 //插入返回自增列只支持单条返回自增 var id=db.Insertable(insertObj).ExecuteReturnIdentity();
Oracle中不使用 IsIdentity 而是用 OracleSequenceName 代替后,功能一模一样
SqlSugar版本 5.1.4.85
SqlSugarClient db2 = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.Oracle, ConnectionString = Config.ConnectionString3, IsAutoCloseConnection = true, MoreSettings=new ConnMoreSettings() { EnableOracleIdentity=true //启用Oracle自增列,需要12C以上版本,11G看文档1.1 } }); //实体只要配置IsIdentity=true,IsPrimaryKey =true 就行了
Out SYS_REFCURSOR
var p = new SugarParameter("@name", ""); //有的传null报错,这边可以换了试试 null和"" p.IsRefCursor = true;// 游标 //如果是output还需要加下面一行 p.Direction = System.Data.ParameterDirection.Output; //执行SQL后p.Value 就会返回值
升级较新版本即可
1. 当批量更新比循环更新还慢的时候 : 升级版本可以解决
2、使用BulkCopy
具体用法:https://www.donet5.com/Home/Doc?typeId=2404
可能是你的数据库字段是Date类型,所以查询的参数加上一个转换就行了
//可以设置参数类型,保证数据库一样就能走索引 默认是 System.Data.DbType.DateTime [SugarColumn(SqlParameterDbType =System.Data.DbType.Date)] public DateTime Time{ get; set; } //Ado.net var p = new SugarParameter("@p", DateTime.Now, System.Data.DbType.Date); //老版本 表达式中可以用:SqlFunc.Oracle_ToDate
老版本:使用SqlFunc.Oracle_ToDate
1、参数化分页插入
db.Insertable(List<实体>).UseParameter().ExecuteCommand()//Oracle中大数据插入性能会提升很多
2、使用BulkCopy
具体用法:https://www.donet5.com/Home/Doc?typeId=2404
关注新版本如果NUGET没有就还没发布
var p1 = new SugarParameter("@p", 1); p1.IsClob = true;
传null会报错: oracle value does not fall within theexpected range
var p1 = new SugarParameter(":p", byte[] );//不能是null ,可以是空new byte[]{}
“ORA-26028: 索引 ZHUCHE.PK_TESTFAST11_ID 在最初处于无法使用的状态”
bulkCopy导入时导入重复数据,特别拖断点处理的时候,失效导入进去重复数据
解决方案:
alter table TESTFAST11 drop primary key
找出重复数据删掉
在重新创建索引
ORA-01745: 无效的主机/绑定变量名 ,可能表和字段名是关键字,因为ORACLE 就不像SQLSERVER加个转释就百分百处理了关键字命名
用表达式IN支持1000以上
db.Queryable<Order>().Where(it=>ids.Contains(it.Id)).ToList();
部分用户出现大数据导入乱码,单独安装 升级到以下版本可以解决
Oracle.ManagedDataAccess.Core 3.21.50
Gitee搜索:SqlSugar 下载OracleUS7ASCLL 专用版本
//需要升级到5.1.4.71-preview02 [SugarColumn(SqlParameterDbType =typeof(Nvarchar2PropertyConvert) )] public string Name { get; set; }
5.1.2.5-pview02 特殊字符使用NVarchar2编码
//Aop全局处理 db.Aop.OnExecutingChangeSql = (sql, pars) => { if (pars != null) { foreach (var item in pars) { //如果是DbTppe=string设置成OracleDbType.Nvarchar2 item.IsNvarchar2 = true; } }; return new KeyValuePair<string, SugarParameter[]>(sql, pars); };
//需要升级到5.1.4.79-preview02 支持多库共存 [SugarColumn(SqlParameterDbType =typeof(NClobPropertyConvert) )] public string Name { get; set; }
var p=new SugarParameter("@p",value); p.IsArray=true;
2016 © donet5.comApache Licence 2.0