From 2b8c470728ab8b833dcb8e4a808c131735f8315d Mon Sep 17 00:00:00 2001 From: falcon <9504402@qq.com> Date: Fri, 11 Dec 2020 18:15:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=AE=9A=E4=B9=89=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E8=BF=87=E7=A8=8B=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Falcon.StoredProcedureRunner.sln | 8 ++++++- .../FalconSPPrarmTypeAttribute.cs | 21 ++++++++++++++++++ src/Falcon.StoredProcedureRunner/Runner.cs | 22 ++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/Falcon.StoredProcedureRunner/FalconSPPrarmTypeAttribute.cs diff --git a/src/Falcon.StoredProcedureRunner.sln b/src/Falcon.StoredProcedureRunner.sln index ef1b4b6..9c1c09b 100644 --- a/src/Falcon.StoredProcedureRunner.sln +++ b/src/Falcon.StoredProcedureRunner.sln @@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30804.86 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Falcon.StoredProcedureRunner", "Falcon.StoredProcedureRunner\Falcon.StoredProcedureRunner.csproj", "{13D3139B-60C2-4785-ADCB-4F839BDEC3C4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Falcon.StoredProcedureRunner", "Falcon.StoredProcedureRunner\Falcon.StoredProcedureRunner.csproj", "{13D3139B-60C2-4785-ADCB-4F839BDEC3C4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Falcon.StoredProcedureRunner.Example", "Falcon.StoredProcedureRunner.Example\Falcon.StoredProcedureRunner.Example.csproj", "{3D5C85F0-94BF-487E-8418-B39FF3505262}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,6 +17,10 @@ Global {13D3139B-60C2-4785-ADCB-4F839BDEC3C4}.Debug|Any CPU.Build.0 = Debug|Any CPU {13D3139B-60C2-4785-ADCB-4F839BDEC3C4}.Release|Any CPU.ActiveCfg = Release|Any CPU {13D3139B-60C2-4785-ADCB-4F839BDEC3C4}.Release|Any CPU.Build.0 = Release|Any CPU + {3D5C85F0-94BF-487E-8418-B39FF3505262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D5C85F0-94BF-487E-8418-B39FF3505262}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D5C85F0-94BF-487E-8418-B39FF3505262}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D5C85F0-94BF-487E-8418-B39FF3505262}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Falcon.StoredProcedureRunner/FalconSPPrarmTypeAttribute.cs b/src/Falcon.StoredProcedureRunner/FalconSPPrarmTypeAttribute.cs new file mode 100644 index 0000000..ba8e80e --- /dev/null +++ b/src/Falcon.StoredProcedureRunner/FalconSPPrarmTypeAttribute.cs @@ -0,0 +1,21 @@ +using System; +using System.Data; + +namespace Falcon.StoredProcedureRunner +{ + /// + /// 定义存储过程参数类型 + /// + public class FalconSPPrarmTypeAttribute:Attribute + { + /// + /// 参数名 + /// + public SqlDbType PType { get; set; } + /// + /// 定于存储过程参数名称 + /// + /// 参数类型 + public FalconSPPrarmTypeAttribute(SqlDbType pType) { this.PType = pType; } + } +} diff --git a/src/Falcon.StoredProcedureRunner/Runner.cs b/src/Falcon.StoredProcedureRunner/Runner.cs index ed20ace..55b150a 100644 --- a/src/Falcon.StoredProcedureRunner/Runner.cs +++ b/src/Falcon.StoredProcedureRunner/Runner.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Data; using System.Data.Common; using System.Linq; using System.Reflection; @@ -137,10 +138,29 @@ namespace Falcon.StoredProcedureRunner foreach(var p in typeof(T).GetProperties()) { if(!p.CanRead || ignoreProp(p)) continue; - yield return new SqlParameter($"@{getPrarmName(p)}",p.GetValue(data)); + var pt = getPrarmType(p); + if(pt.HasValue) { + var np = new SqlParameter($"@{getPrarmName(p)}",pt); + np.Value = p.GetValue(data); + yield return np; + } else { + yield return new SqlParameter($"@{getPrarmName(p)}",p.GetValue(data)); + } } } + /// + /// 获取存储过程参数类型 + /// + /// 对应的属性 + private static SqlDbType? getPrarmType(PropertyInfo p) { + var np = p.GetCustomAttribute(true); + if(np != null && np is FalconSPPrarmTypeAttribute na) { + return na.PType; + } + return null; + } + /// /// 是否忽略属性 ///