MS Access迁移至SQL Server时C#参数化SQL查询无返回行求助
问题排查与解决方案
1. 首要错误:参数被单引号包裹变成字符串常量
你当前的WHERE条件写法为:
WHERE Incident_Full_Num = '@Incident_Full_Num'
此处给参数加上单引号后,SQL会直接将'@Incident_Full_Num'识别为普通字符串常量,和Incident_Full_Num字段做匹配,而不会读取参数传入的实际值,自然无法匹配到对应数据。
修正方案:删除参数两侧的单引号即可:
WHERE Incident_Full_Num = @Incident_Full_Num
2. 次要问题:冗余参数导致匹配错位
OleDb的参数规则是按传入的先后顺序匹配,不识别参数名称。你当前的查询仅用到了@Incident_Full_Num这1个参数,但额外传入了9个查询中完全没有用到的参数,会直接导致参数匹配错位,进一步造成查询无结果。
修正方案:删除所有查询未用到的参数,仅保留需要的参数即可:
List<OleDbParameter> l = new List<OleDbParameter>(); l.Add(new OleDbParameter("@Incident_Full_Num", mi.incident_full_number));
可选优化建议
你已经将数据库迁移到SQL Server,建议将OleDb相关类替换为SQL Server原生的SqlConnection、SqlCommand、SqlParameter,原生驱动性能更高,且支持按参数名匹配,不会出现参数顺序错位的问题。
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

