Optimization emit error message

This commit is contained in:
sunkaixuan 2023-03-08 00:39:38 +08:00
parent b8d45e5ad2
commit 62be4004d0
4 changed files with 58 additions and 30 deletions

View File

@ -30,14 +30,14 @@ namespace SqlSugar
if (dataReader == null) return result;
while (dataReader.Read())
{
try
{
//try
//{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
//}
//catch (Exception ex)
//{
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
//}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);
@ -67,14 +67,14 @@ namespace SqlSugar
if (dataReader == null) return result;
while (await((DbDataReader)dataReader).ReadAsync())
{
try
{
//try
//{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
//}
//catch (Exception ex)
//{
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
//}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);

View File

@ -242,13 +242,18 @@ namespace SqlSugar
}
private void BindField(ILGenerator generator, LocalBuilder result, EntityColumnInfo columnInfo, string fieldName)
{
if (columnInfo.SqlParameterDbType is Type)
if (columnInfo.SqlParameterDbType is Type)
{
BindCustomFunc(generator,result, columnInfo, fieldName);
return;
}
int i = DataRecord.GetOrdinal(fieldName);
Label endIfLabel = generator.DefineLabel();
//2023-3-8
Label tryStart = generator.BeginExceptionBlock();//begin try
//2023-3-8
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
@ -259,6 +264,15 @@ namespace SqlSugar
BindMethod(generator, columnInfo, i);
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel);
//2023-3-8
generator.Emit(OpCodes.Leave, tryStart);//eng try
generator.BeginCatchBlock(typeof(Exception));//begin catch
generator.Emit(OpCodes.Ldstr, ErrorMessage.GetThrowMessage($"{columnInfo.EntityName} {columnInfo.PropertyName} bind error", $"{columnInfo.PropertyName}绑定到{columnInfo.EntityName}失败,可以试着换一个类型或者使用ORM自定义类型实现"));//thow message
generator.Emit(OpCodes.Newobj, typeof(Exception).GetConstructor(new Type[] { typeof(string) }));
generator.Emit(OpCodes.Throw);
generator.EndExceptionBlock();
//2023-3-8
}
private void BindMethod(ILGenerator generator, EntityColumnInfo columnInfo, int ordinal)
{

View File

@ -30,14 +30,14 @@ namespace SqlSugar
if (dataReader == null) return result;
while (dataReader.Read())
{
try
{
//try
//{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
//}
//catch (Exception ex)
//{
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
//}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);
@ -67,14 +67,14 @@ namespace SqlSugar
if (dataReader == null) return result;
while (await((DbDataReader)dataReader).ReadAsync())
{
try
{
//try
//{
result.Add(entytyList.Build(dataReader));
}
catch (Exception ex)
{
Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
}
//}
//catch (Exception ex)
//{
// Check.Exception(true, ErrorMessage.EntityMappingError, ex.Message);
//}
SetAppendColumns(dataReader);
}
ExecuteDataAfterFun(context, dataAfterFunc, result);

View File

@ -242,13 +242,18 @@ namespace SqlSugar
}
private void BindField(ILGenerator generator, LocalBuilder result, EntityColumnInfo columnInfo, string fieldName)
{
if (columnInfo.SqlParameterDbType is Type)
if (columnInfo.SqlParameterDbType is Type)
{
BindCustomFunc(generator,result, columnInfo, fieldName);
return;
}
int i = DataRecord.GetOrdinal(fieldName);
Label endIfLabel = generator.DefineLabel();
//2023-3-8
Label tryStart = generator.BeginExceptionBlock();//begin try
//2023-3-8
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldc_I4, i);
generator.Emit(OpCodes.Callvirt, isDBNullMethod);
@ -259,6 +264,15 @@ namespace SqlSugar
BindMethod(generator, columnInfo, i);
generator.Emit(OpCodes.Callvirt, columnInfo.PropertyInfo.GetSetMethod(true));
generator.MarkLabel(endIfLabel);
//2023-3-8
generator.Emit(OpCodes.Leave, tryStart);//eng try
generator.BeginCatchBlock(typeof(Exception));//begin catch
generator.Emit(OpCodes.Ldstr, ErrorMessage.GetThrowMessage($"{columnInfo.EntityName} {columnInfo.PropertyName} bind error", $"{columnInfo.PropertyName}绑定到{columnInfo.EntityName}失败,可以试着换一个类型或者使用ORM自定义类型实现"));//thow message
generator.Emit(OpCodes.Newobj, typeof(Exception).GetConstructor(new Type[] { typeof(string) }));
generator.Emit(OpCodes.Throw);
generator.EndExceptionBlock();
//2023-3-8
}
private void BindMethod(ILGenerator generator, EntityColumnInfo columnInfo, int ordinal)
{