C#里使用DataTable进行load时由于查询语句有left join 引起主键为null报异常
表结构是一个主表和一个从表
CREATE TABLE `student` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
insert into student values('张三');
CREATE TABLE `stufav` (
`studentId` int(11) NOT NULL,
`favoriteId` int(11) NOT NULL,
PRIMARY KEY (`studentId`,`favoriteId`)
) DEFAULT CHARSET=utf8;C#代码为
private static void TestDataTableLoadNull()
{
using (GBaseConnection conn = new GBaseConnection(connectionString))
{
try
{
conn.Open();
GBaseCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from student s left join stufav sf on sf.studentId=s.id";
// cmd.ExecuteQuery();
GBaseDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
}
catch (Exception ex)
{
throw (ex);
}
finally
{
conn.Close();
}
}
}
因为在第二个表里没有数据,所以left join 的结果集里,最后2个字段为null
而这2个字段又是主键,不能为空,导致在load时出现如下异常:
{"未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。"}
注意:那个select * 是无法修改的,而且还有其它的情况,就算把*替换为字段名也没用
比如主表一个主键,而从表是多主键,而且后面的操作必须用到这些字段,就算是null
相关推荐
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
在之前只知道SqlServer支持数据批量插入,殊不知道Oracle、SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法。 首先说一下,IProvider里有一个用于实现批量插入的插件服务接口IBatcherProvider,此接口在前一篇文章中已经提到过了。 /// /// 提供数据批量处理的方法。 /// public interface IBatcherProvider : IProviderService { /// <summary
C# Winform库存管理系统开发实战:从数据库设计到业务逻辑实现
数据库设计是管理信息系统的核心基础,它通过定义表结构、字段约束和表间关系来组织与存储业务数据。在C#桌面应用开发中,ADO.NET作为.NET Framework的数据访问组件,提供了连接、命令、数据读取器等核心类,用于高效、安全地操作SQL Server等关系型数据库。其技术价值在于通过参数化查询有效防止SQL注入,利用连接池管理提升性能,并结合事务处理确保多表操作的数据一致性。在进销存、ERP等企业内部管理场景中,这种C/S架构的Winform应用因其响应迅速、交互直观、部署简单,依然是许多传统行业的主
C# WinForm仓库管理系统开发实战:从三层架构到SQL Server数据库设计
数据库管理系统是软件工程中用于持久化存储和操作数据的核心组件,其设计直接关系到应用的性能、安全性与可维护性。在桌面应用开发领域,C# WinForm凭借其成熟的控件库和高效的开发体验,常被用于构建中小型业务系统。结合经典的三层架构(UI、BLL、DAL),开发者能有效分离关注点,提升代码的可读性和可扩展性。以仓库管理系统为例,这类系统通过实现**入库管理**、**出库管理**、库存盘点与报表生成等核心功能,将传统手工流程数字化,显著提升了仓储作业的准确性与效率。其技术价值在于提供了一个完整、可独立部署的解决
ASP.NET鲜花网店系统拆解:架构、订单与ViewState安全加固
B/S架构作为企业级Web应用的主流模式,凭借免部署、集中升级等优势长期占据电商系统设计核心。ASP.NET WebForms作为微软早期Web开发框架,通过控件事件驱动与视图状态(ViewState)机制,简化了页面交互与数据绑定流程,成为众多遗留系统的技术底座。基于SQL Server的数据库设计与C#三层架构(表示层、业务层、数据访问层)完整支撑了商品管理、购物车、订单流转等核心电商链路。然而,旧系统普遍面临ViewState反序列化攻击、SQL注入、明文密码等安全隐患,尤其是ViewState默认仅
国央企创新负责人如何借助智能体技术推动内部技术成果转化?.docx
国央企创新负责人如何借助智能体技术推动内部技术成果转化?


