StatCentric.Tracker.Worker.dll中出现未处理的“System.AccessViolationException”类型异常
附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
我已经在Stack Overflow和各种博客上阅读了很多帖子,似乎无法找到解决方案。
我正在做一些非常基本的事情:
public void Execute(ITrackerRequestModel model)
{
PageviewRequest p = (PageviewRequest)model;
using (var db = new StatCentricEntities())
{
db.SetTimeout(60);
db.sp_Log_PageView2(p.SiteId, p.DateTimeUtc, p.vid, p.QueryString, p.p, p.t);
}
}
但每次尝试调用db.sp_Log_PageView2时都会弹出此错误。这似乎只发生在我的工作者角色里面(我正在使用Windows Azure)。
另外值得注意的是,我使用的是Windows Azure模拟器,而且我使用的是Windows 8.1。
我尝试了以下内容:
我以管理员身份运行Visual Studio并连接到Azure中托管的远程SQL Server数据库。
有关如何解决或进一步诊断此问题的任何想法都表示赞赏。
答案 0 :(得分:1)
这不是真正的修复,但在等待Microsoft的修复时,您可以使用此解决方法。
我有同样的问题。我也尝试了解决这个问题的一切。几天后,我放弃并使用手动“解决方法”。只需几分钟就可以将现有的sproc调用复制并转换为新的调用。
只需忽略自动生成的函数并手动调用存储过程。您可以将自动生成的类用于返回的数据。复制和修改现有功能,您将轻松获得正确的参数名称和类型。
只需将部分类实现到不同的文件:
public partial class StatCentricEntities
{
public virtual List<sp_Log_PageView2_Result> my_sp_Log_PageView2(
Guid? siteId,
DateTime time,
string param3,
string param4 )
{
return Database.SqlQuery<sp_Log_PageView2_Result>(
"sp_Log_PageView2 @siteId @time @param3 @param4",
new SqlParameter("siteId", siteId),
new SqlParameter("time", time),
new SqlParameter("param3", param3),
new SqlParameter("param4", param4)).ToList();
}
}
答案 1 :(得分:0)
我得到了这个&#34;尝试读取或写入受保护的内存异常&#34;使用具有类型&#39;日期&#39;的输出参数的SQL Server存储过程时出错。我尝试了各种各样的事情没有成功,并且为了时间的推移,我们选择了以下解决方案。
1)删除date
类型的输出参数2)通过select语句返回一个字符串
SELECT CONVERT(char(10), @AsOfDate, 20) AS AsOfDate
3)将存储过程返回的字符串转换为C#
中的DateTime值DateTime asOfDate = DateTime.Now;
using (var context = new DA.MyEntities())
{
var procResult = context.myStoredProcedure(myParameter).FirstOrDefault();
DateTime.TryParse(procResult, out asOfDate);
}
我对这种妥协并不十分满意,但它确实让我向前迈进。