我开始学习C#并提出了以下例外情况:
System.InvalidProgramException
HResult=0x8013153A
Message=JIT Compiler encountered an internal limitation.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
当我尝试使用传递了DateTime参数的存储过程从数据库中获取数据时,会发生此异常。
这是我得到的完整信息:
<Error>
<Message>An error has occurred.</Message>
<Exceptionmessage>JIT Compiler encountered an internal limitation.</Exceptionmessage>
<ExceptionType>System.InvalidProgramException</ExceptionType>
<StackTrace>
at ParamInfoe2776a66-00bd-4ad7-a77a-368cc977a638(IDbCommand,Object ) at Dapper.CommandDefinition.SetupCommand(idbconnection cnn,action`2 paramReader) in C:\projects\dapper\Dapper\CommandDefinition.cs:line 128 at Dapper.SqlMapper.<QueryImpl>d__140`1.MoveNext() in C:\projects\dapper\Dapper\SqlMapper.cs:line 1073 at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[tsource](IEnumerable`1 source) at Dapper.SqlMapper.Query[T](idbconnection cnn,String sql,Object param,IDbTransaction transaction,Boolean buffered,Nullable`1 commandTimeout,Nullable`1 commandType) in C:\projects\dapper\Dapper\SqlMapper.cs:line 721 at MFDataManager.library.Internal.SqlDataaccess.LoadData[T,U](String storedProcedure,U parameters,String connectionStringName) in D:\MICE_forecast\MICE_forecast\MICE_Forecast\MFDataManagerlibrary\Internal\SqlDataaccess.cs:line 27 at MFDataManagerlibrary.Dataaccess.FiveDaysEventsData.getFiveDaysEvents() in D:\MICE_forecast\MICE_forecast\MICE_Forecast\MFDataManagerlibrary\Dataaccess\FiveDaysEventsData.cs:line 21 at MFDataManager.Controllers.FiveDaysEventsController.Get() in D:\MICE_forecast\MICE_forecast\MICE_Forecast\MFDataManager\Controllers\FiveDaysEventsController.cs:line 19 at lambda_method(Closure,Object,Object[] ) at system.web.Http.Controllers.ReflectedHttpactionDescriptor.actionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance,Object[] methodParameters) at system.web.Http.Controllers.ReflectedHttpactionDescriptor.actionExecutor.Execute(Object instance,Object[] arguments) at system.web.Http.Controllers.ReflectedHttpactionDescriptor.ExecuteAsync(HttpControllerContext controllerContext,IDictionary`2 arguments,CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.Taskawaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(Task task) at system.web.Http.Controllers.ApiControlleractionInvoker.<InvokeactionAsyncCore>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.Taskawaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(Task task) at system.web.Http.Controllers.actionFilterResult.<ExecuteAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.Taskawaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(Task task) at system.web.Http.Controllers.AuthenticationFilterResult.<ExecuteAsync>d__5.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.Taskawaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.Taskawaiter.HandleNonSuccessAndDebuggerNotification(Task task) at system.web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__15.MoveNext()
</StackTrace>
</Error>
将感谢您的任何建议!
代码在下面
这部分正在调用存储过程并传递参数:
public class FiveDaysEventsData
{
public List <FiveDaysEventsModel> getFiveDaysEvents()
{
SqlDataaccess sql = new SqlDataaccess();
//stuff for testing:
DateTime date = new DateTime(2019,11,10);
var output = sql.LoadData<FiveDaysEventsModel,DateTime>("dbo.spGetDatePlusFiveDaysEvents",date,"MFData");
return output;
}
}
这是sql连接和数据加载(使用Dapper)的一部分:
internal class SqlDataaccess
{
public string getconnectionString(string name)
{
return Configurationmanager.ConnectionStrings[name].ConnectionString;
}
public List<T> LoadData<T,U>(string storedProcedure,string connectionStringName)
{
string connectionString = getconnectionString(connectionStringName);
using (idbconnection connection = new SqlConnection (connectionString))
{
List<T> rows = connection.Query<T>(storedProcedure,parameters,commandType: CommandType.StoredProcedure).ToList();
return rows;
}
}
}
这是我要获取的商品的模型:
public class FiveDaysEventsModel
{
public DateTime Event_Date { get; set; }
public string CompanyName { get; set; }
public string Booked_for { get; set; }
public TimeSpan Time_From { get; set; }
public TimeSpan Time_To { get; set; }
public string LocationName { get; set; }
public string ContactName { get; set; }
public string PhoneNumber { get; set; }
public string EventStatus { get; set; }
public int EventID { get; set; }
}
这是一个存储过程:
CREATE PROCEDURE [dbo].[spGetDatePlusFiveDaysEvents]
@EventDate Datetime2
AS
BEGIN
set nocount on;
SELECT
ed.Event_Date,c.[Name] as CompanyName,ed.Booked_for,ed.Time_From,ed.Time_To,loc.[Name] as LocationName,cnt.[Name] as ContactName,cnt.PhoneNumber,ed.[Status] as EventStatus,ed.ID as EventID
FROM
dbo.[EventData] ed,dbo.Company c,dbo.Contact cnt,dbo.[Location] loc
WHERE
(ed.Event_Date>= @EventDate and ed.Event_Date<= DATEADD(day,5,@EventDate)) and
c.ID = ed.Company_ID and ed.ContactID = cnt.ID;
End
更新1 :
如果我使用没有参数和LINQ版本输出的SP-一切正常:
var output = sql.LoadData<FiveDaysEventsModel,dynamic>("dbo.spEvents_Getall",new { },"MFData");
//instead of
var output = sql.LoadData<FiveDaysEventsModel,"MFData");
和
return output.Where(o => (o.Event_Date >= DateTime.Today && o.Event_Date <= DateTime.Today.AddDays(5))).ToList();
//instead of
return output;
使用SP:
CREATE PROCEDURE [dbo].[spEvents_Getall]
AS
BEGIN
set nocount on;
SELECT
ed.Event_Date,ed.[Status] as [Status],ed.ID
FROM
dbo.[EventData] ed,dbo.[Location] loc
WHERE
ed.Company_ID = c.ID and
ed.ContactID = cnt.ID and
ed.LocationID = loc.ID
END
但是我不想每次都加载整个表...
我想DateTime转换有问题,任何想法。在哪里看?