C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题


💻 前言

关于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无法解决。包括最新的.Net Core、.NET6、.NET7 都无法解决这个问题。

FreeSql 对 Oracle 支持非常友好,是 c#.net ORM 不二之选,提供了 Ado.net 实现包 FreeSql.Provider.Oracle,Odbc 实现包 FreeSql.Provider.Odbc,Oledb 实现包 FreeSql.Provider.OracleOledb,他们都支持 .NETCore2.1+、.NET4.0+ 等最新或较低的 .NETFramework 版本。

FreeSql 访问 Oracle 只需要引用 FreeSql.Provider.Oracle/FreeSql.Provider.Odbc/FreeSql.Provider.OracleOledb 任意一个包即可。

若想以 Ado.net 驱动访问数据库,请安装:

dotnet add package FreeSql.Provider.Oracle

若想以 ODBC 驱动访问数据库,请安装:

dotnet add package FreeSql.Provider.Odbc

若想以 Oledb 驱动访问数据库,请安装:

dotnet add package FreeSql.Provider.OracleOledb


🌳 解决办法

安装 FreeSql.Provider.OracleOledb 使用 Oledb 驱动解决读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题。

有关 US7ASCII Oracle 参考了其他解决方法:

C#处理读取使用US7ASCII的oracle数据库中文显示乱码问题
https://blog.csdn.net/guhun_shmily/article/details/83064225
public class DB
{
   
    static Lazy<IFreeSql> oracleLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder()
        .UseConnectionString(FreeSql.DataType.Oracle, "Provider=OraOLEDB.Oracle;user id=9user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
        //.UseConnectionString(FreeSql.DataType.OdbcOracle, "...") //ODBC 特定类型
        .UseAutoSyncStructure(true)
        .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
        .UseNoneCommandParameter(true)
        .UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText))
        .Build());
    public static IFreeSql oracle => oracleLazy.Value;
}

定义 DB.cs 类之后就可以快乐的 CRUD 了。FreeSql 提供多种 CRUD 使用习惯,请根据实际情况选择团队合适的一种:

  • 要么 FreeSql,原始用法;
  • 要么 FreeSql.Repository,仓储+工作单元习惯;
  • 要么 FreeSql.DbContext,有点像 EFCore 的使用习惯;
  • 要么 FreeSql.BaseEntity,求简单使用这个;
  • 要么 直接像 dapper 那样使用 OracleConnection 扩展方法;

🦄 CRUD 模式一:原始用法 API

DB.oracle.Select<T>(); //查询
DB.oracle.Insert<T>(); //插入
DB.oracle.Update<T>(); //更新
DB.oracle.Delete<T>(); //删除
DB.oracle.InsertOrUpdate<T>()// 插入或更新
DB.oracle
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用FreeSqlORM功能来查询MySQL数据库内某个月内的所有数据,具体的代码如下: ```csharp using System; using System.Collections.Generic; using System.Linq; using FreeSql; using FreeSql.DataAnnotations; public class MyEntity { [Column(IsIdentity = true)] public int Id { get; set; } public string Name { get; set; } public DateTime CreateTime { get; set; } } public class Program { static void Main(string[] args) { var mysqlConnectionString = "your mysql connection string here"; var freesql = new FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.MySql, mysqlConnectionString) .UseAutoSyncStructure(true) //自动同步实体结构 .Build(); var entities = freesql.Select<MyEntity>() .Where(e => e.CreateTime >= new DateTime(2021, 1, 1) && e.CreateTime < new DateTime(2021, 2, 1)) .ToList(); foreach (var entity in entities) { Console.WriteLine($"Id: {entity.Id}, Name: {entity.Name}, CreateTime: {entity.CreateTime}"); } } } ``` 在上面的代码中,我们首先定义了一个 `MyEntity` 类,该类表示一个实体对象,其中包含了 `Id`、`Name` 和 `CreateTime` 三个属性。然后,在 `Main` 方法中,我们首先创建了一个 `FreeSql` 对象,并指定了 MySQL 数据库的连接字符串。接着,我们使用 `freesql.Select<MyEntity>()` 方法来创建一个查询对象,并通过 `Where` 方法指定了查询条件,即 `CreateTime` 字段在 `2021年1月1日` 至 `2021年2月1日` 之间。最后,我们使用 `ToList` 方法将查询结果转换为一个实体列表,并遍历输出每个实体对象的属性值。 注意,上面的代码中,我们使用了 `UseAutoSyncStructure(true)` 方法来启用自动同步实体结构功能,这样 FreeSql 在第一次查询时会自动创建 `MyEntity` 表。如果你的 MySQL 数据库中已经存在了 `MyEntity` 表,可以去掉这行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值