放到列表里面可以提高更新性能
//获取模型所需元素名称及顺序,从中拿到成分名称、成分初始值、成分内控标准,并计算出成分偏差,写入到表ElementName
public void GetCompentName(string sampleNo,string steelName)
{
try
{
using IDbConnection dbConnection = new OracleConnection(str_Conn_AusinL2);
dbConnection.Open();
const int maxElementId = 100;//元素位置超过此值则不进入运算
string sqlStr_CompName = $"SELECT * From TB_MODE2_MAIN1_ELEMENTNAME WHERE ID < {maxElementId} ORDER BY ID ASC";
string sqlStr_LabSubNew = $"SELECT * From TB_PLC6_DB3_LABSUB WHERE SAMPLE_NO = {sampleNo}";
string sqlStr_LabStandard = $"SELECT * From TB_MODE2_MAIN3_NORMLIZE WHERE STEELNAME = {steelName}";
var varData_CompName = dbConnection.Query<TbModel2Main1ElementName>(sqlStr_CompName).ToList();
var varData_LabSubNewData = dbConnection.Query<TbPlc6DB3LabSub>(sqlStr_LabSubNew).ToList();
var varData_LabStandard = dbConnection.Query<TbModel2Main3Normlize>(sqlStr_LabStandard).ToList();
// 创建一个集合用于批量更新
List<TbModel2Main1ElementName> updatedElementNames = new List<TbModel2Main1ElementName>();
//将新成分分别写入ElementName表的InitialValue中
foreach (var itemCompName in varData_CompName)
{
var matchingLabSubNew = varData_LabSubNewData.FirstOrDefault(x => x.Name.Trim().ToUpper() == itemCompName.Name.Trim().ToUpper());
var matchingLabStandard = varData_LabStandard.FirstOrDefault(x => x.ElementName.Trim().ToUpper() == itemCompName.Name.Trim().ToUpper());
if (matchingLabSubNew != null && matchingLabStandard != null)
{
itemCompName.InitialValue = matchingLabSubNew.Value;
itemCompName.StandardMax = matchingLabStandard.StandardMax;
itemCompName.StandardMin = matchingLabStandard.StandardMin;
itemCompName.ErrMax = itemCompName.StandardMax - itemCompName.InitialValue;
itemCompName.ErrMin = itemCompName.InitialValue - itemCompName.StandardMin;
updatedElementNames.Add(itemCompName);
}
}
// 批量更新TB_MODE2_MAIN1_ELEMENTNAME表中的InitialValue字段,通过list提升性能
string sqlUpdate = $"UPDATE TB_MODE2_MAIN1_ELEMENTNAME SET InitialValue = :InitialValue WHERE id = :ID";
dbConnection.Execute(sqlUpdate, updatedElementNames);
}
catch (Exception ex)
{
AppLog.Info("GetCompentName()出错,信息为: " + ex.Message);
}
}