.NET(C#)连接达梦数据库GUID字段被自动加横线的修复方法

文章讲述了在使用达梦数据库的项目中,由于Adapter.Fill处理后的varchar36被误识别为GUID,导致更新失败。解决方法是在连接字符串中设置varchar36ToGuid为false,或者升级达梦驱动版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因信创的原因项目需要兼容达梦数据库,今天遇到个比较坑爹的问题,简单记录下解决方案。
数据库存的是这样:
在这里插入图片描述
通过DataAdapter.Fill拿出来以后变成了这样
在这里插入图片描述
纳尼?谁让你加上这些横杠的?(掀桌)导致了后续更新死活找不到数据,每次都是更新失败…

原因是varchar36被自动识别成了GUID,转换为了.net的Guid类型,加上了这些横线…
解决方案:
在数据库连接字符串中加入varchar36ToGuid=false;(不配置的话默认是true,导致了此问题)
在这里插入图片描述
需要注意的是,如果该配置无法生效或报错,需要升级一下达梦驱动的版本
在这里插入图片描述

C#中,你可以通过生成一个基于当前时间戳的唯一标识符来创建不会重复的记录编号。这通常可以通过结合当前日期时间和某种形式的序列化,比如自增整数或GUID(全局唯一标识符)。这里有一个简单的例子,使用Guid上一个计数器: ```csharp using System; using System.Data.Entity; using System.Data.SqlClient; public class YourDbContext : DbContext { public DbSet<YourTable> YourTables { get; set; } private int _lastSequence = 0; private readonly Random _randomizer = new Random(); public string GenerateUniqueRecordId() { // 如果这是在SQL Server中,你可以使用NewSequentialID()函数生成一个序列号 var sequence = _lastSequence + _randomizer.Next(1, 100); // 添随机数避免并发冲突 varGuidId = Guid.NewGuid(); // 使用Guid确保唯一 using (var dbConnection = new SqlConnection(ConnectionString)) { dbConnection.Open(); var commandText = "INSERT INTO YourTable (UniqueId, CreatedAt) VALUES (@UniqueId, @CurrentDateTime)"; var command = new SqlCommand(commandText, dbConnection); command.Parameters.AddWithValue("@UniqueId", sequence.ToString("D8") + "-" +GuidId.ToString("N")); // 形如"YYYYMMddHHmmss-xxxxxxxxxxxx" command.Parameters.AddWithValue("@CurrentDateTime", DateTime.UtcNow); command.ExecuteNonQuery(); _lastSequence = sequence; // 更新上次使用的序列号 } return sequence.ToString("D8") + "-" +GuidId.ToString("N"); } } // 使用示例 string recordId = yourDbContext.GenerateUniqueRecordId(); ``` 在这个例子中,`UniqueId`字段由当前时间的Unix时间戳(微秒级别)和一个随机数(防止并发冲突)组成,中间用短横线分隔。这样可以保证每个记录都有一个唯一的、基于时间的编号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰机大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值