本文介绍了getstoredproccommand(“procedurename”,new object [1])在Microsoft.Practices.EnterpriseLibrary.Data.dll中抛出'System.AccessViolationException'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 

public static IEnumerable< PortalList> GetAll()
{
数据库db = DatabaseFactory.CreateDatabase();
DbCommand objComm = db.GetStoredProcCommand(" package
name.procedurename",new object [1]);

var result = new List< PortalList>();
使用(IDataReader rdr = db.ExecuteReader(objComm))
{
while(rdr.Read())
{
result.Add(Construct(rdr) );
}
}
返回结果;
}

我的商店程序是这样的

  PROCEDURE PRC_PROCEDURE(resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN resultset_out FOR SELECT * FROM PORTALLISTS;
END PRC_PORTALLISTS_GETALL;

我在这行中有错误  DbCommand objComm = db.GetStoredProcCommand(" package name.procedurename",new object [1]);

如果我这样做

  DbCommand objComm = db.GetStoredProcCommand(" package name.procedurename");  

错误消失但我面临同样的错误 [抛出异常:Microsoft.Practices.EnterpriseLibrary.Data.dll中的'System.AccessViolationException']  在此行中使用  (IDataReader rdr = db.ExecuteReader(objComm)) 。我正在使用dot.net framework 4和Microsoft.Practices.EnterpriseLibrary.Data.dll版本是5.0.0.0。你们能帮助我吗?

在portallistservices.cs文件中我有这个

    公开   静态    IEnumerable  <   PortalList  >     GetAll  ()  
{
返回 GetAll true );
}

私有静态的IEnumerable< PortalList> GETALL(布尔forceDataReload)
&NBSP;&NBSP;&NBSP;&NBSP; {
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;常量字符串cacheKey = QUOT; PortalListService_GetAll英寸;

&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; IEnumerable的< PortalList>结果= NULL;

&NBSP;&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;若(forceDataReload!)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;结果= GetFromCache(cacheKey);

&NBSP;&NBSP ;&NBSP;&NBSP;&NBSP;&NBSP;如果(结果== NULL)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; {
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;&NBSP;结果= PortalListRepository.GetAll();
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; AddToCache(cacheKey,结果);
&NBSP;&NBSP;&NBSP;&NBSP;   }
      返回结果;
    }



解决方案

public static IEnumerable<PortalList> GetAll() { Database db = DatabaseFactory.CreateDatabase(); DbCommand objComm = db.GetStoredProcCommand("package name.procedurename", new object[1]); var result = new List<PortalList>(); using (IDataReader rdr = db.ExecuteReader(objComm)) { while (rdr.Read()) { result.Add(Construct(rdr)); } } return result; }

and my store procedure is like this

PROCEDURE PRC_PROCEDURE (resultset_out OUT TYPES.cursorType)
AS
BEGIN
OPEN resultset_out FOR SELECT * FROM PORTALLISTS;
END PRC_PORTALLISTS_GETALL;

i am having error in this line DbCommand objComm = db.GetStoredProcCommand("package name.procedurename", new object[1]);

if i do this

DbCommand objComm = db.GetStoredProcCommand("package name.procedurename");

error is gone but then i am facing same error[Exception thrown: 'System.AccessViolationException' in Microsoft.Practices.EnterpriseLibrary.Data.dll] in this line using (IDataReader rdr = db.ExecuteReader(objComm)) . i am using dot.net framework 4 and Microsoft.Practices.EnterpriseLibrary.Data.dll version is 5.0.0.0. can you guys pls help me?

and in portallistservices.cs file i have this

    public static IEnumerable<PortalList> GetAll()
    {
        return GetAll(true);
    }

private static IEnumerable<PortalList> GetAll(bool forceDataReload)
        {
            const string cacheKey = "PortalListService_GetAll";

            IEnumerable<PortalList> result = null;

            if (!forceDataReload)
                result = GetFromCache(cacheKey);

            if (result == null)
            {
                result = PortalListRepository.GetAll();
                AddToCache(cacheKey, result);
            }

            return result;
        }


解决方案


这篇关于getstoredproccommand(“procedurename”,new object [1])在Microsoft.Practices.EnterpriseLibrary.Data.dll中抛出'System.AccessViolationException'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-25 19:55