如何检查零件号是否存在于tblpart_material表及C#代码实现
修正SQL语句与C#代码实现
一、修正检查零件号的SQL语句
你原来的SQL存在语法错误(缺少FROM子句)且逻辑冗余,根据需求分两种场景提供正确语句:
场景1:仅检查指定零件号是否存在于tblpart_material表
SELECT number FROM tblpart_material WHERE number = 'MAT100007'
有返回结果则表示零件号存在,无结果则不存在。
场景2:确认零件号在主表tblpart中,同时存在于tblpart_material表
用INNER JOIN关联查询:
SELECT p.number FROM tblpart p INNER JOIN tblpart_material m ON p.number = m.number WHERE p.number = 'MAT100007'
或者用EXISTS实现更高效的存在性验证:
SELECT p.number FROM tblpart p WHERE p.number = 'MAT100007' AND EXISTS (SELECT 1 FROM tblpart_material m WHERE m.number = p.number)
二、C#代码整合逻辑
你的现有代码存在变量名不一致、无数据时会抛异常的问题,修正后如下(基于Dapper实现,无匹配数据时返回null):
public Material GetMaterialByNumber(string number) { using (IDbConnection db = new MySqlConnection(AppConnection.ConnectionString)) { // 可根据需求替换为上述场景1或场景2的SQL语句 string query = @"SELECT * FROM tblpart_material WHERE number = @Number"; // QuerySingleOrDefault在无匹配时返回null,有匹配时返回单个Material对象 return db.QuerySingleOrDefault<Material>(query, new { Number = number }); } }
关键说明
QuerySingleOrDefault<T>:Dapper方法,查询单个结果,无匹配时返回引用类型的默认值null- 参数化查询:使用
@Number避免SQL注入风险 using语句:自动释放数据库连接,无需手动处理连接状态
内容的提问来源于stack exchange,提问作者Jocelyn
相关产品推荐
相关产品推荐

