定义返回值类型异常和返回值转换异常

This commit is contained in:
falcon 2020-12-12 10:35:35 +08:00
parent efc1fcd5d0
commit ee43f42364
3 changed files with 42 additions and 5 deletions

View File

@ -0,0 +1,17 @@
using System;
namespace Falcon.StoredProcedureRunner
{
/// <summary>
/// 返回类型转换异常
/// </summary>
public class ReturnTypeCastException:Exception
{
/// <summary>
/// 构造一个返回类型转换异常。
/// </summary>
/// <param name="ex">类型转换异常</param>
public ReturnTypeCastException(Exception ex)
: base("将存储过程返回结果转换为指定返回类型时发生错误!无法转换",ex) { }
}
}

View File

@ -0,0 +1,16 @@
using System;
namespace Falcon.StoredProcedureRunner
{
/// <summary>
/// 返回类型定义异常
/// </summary>
public class ReturnTypeException:Exception
{
/// <summary>
/// 构造一个返回类型错误异常
/// </summary>
public ReturnTypeException() : base("必须在参数类型上设置ReturnTypeAttribute或者通过合适重载明确指定返回数据类型。") {
}
}
}

View File

@ -4,8 +4,6 @@ using System.Data;
using System.Data.Common;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
@ -44,7 +42,7 @@ namespace Falcon.StoredProcedureRunner
public IEnumerable<object> Run<TPrarmType>(DbContext db,TPrarmType data) {
var rType = getRequtnType(typeof(TPrarmType));
if(rType == null) {
throw new Exception("必须在参数类型上设置ReturnTypeAttribute");
throw new ReturnTypeException();
}
return Run(db,typeof(TPrarmType),rType,data);
}
@ -58,7 +56,13 @@ namespace Falcon.StoredProcedureRunner
/// <param name="data">参数数据</param>
/// <returns>查询结果枚举</returns>
public IEnumerable<TReturnType> Run<TPrarmType, TReturnType>(DbContext db,TPrarmType data) where TReturnType : class, new() {
try {
return Run(db,typeof(TPrarmType),typeof(TReturnType),data).Cast<TReturnType>();
} catch(InvalidCastException ice) {
throw new ReturnTypeCastException(ice);
} catch(Exception ex) {
throw ex;
}
}
/// <summary>
@ -75,7 +79,7 @@ namespace Falcon.StoredProcedureRunner
var connection = db.Database.GetDbConnection();
using(var cmd = connection.CreateCommand()) {
cmd.CommandText = pm;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(paras);
connection.Open();
var dr = cmd.ExecuteReader();