2017-12-17 12 views
-1
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; 
    } 

에 'System.AccessViolationException'가 발생하고 내 가게 절차는 내가이getstoredproccommand ("procedurename", 새로운 객체 [1]) Microsoft.Practices.EnterpriseLibrary.Data.dll

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"); 

오류가 사라지고하지만 IA 이 줄에 같은 오류 [Exception thrown: 'System.AccessViolationException' in Microsoft.Practices.EnterpriseLibrary.Data.dll]이 나타나면 (IDataReader rdr = db.ExecuteReader(objComm))을 사용하십시오. 나는 dot.net 프레임 워크 4를 사용하고 Microsoft.Practices.EnterpriseLibrary.Data.dll 버전은 5.0.0.0입니다. 너희들은 나를 도와 줄 수있어?

및 portallistservices.cs에

난 당신이 PARAM 아웃으로 resultset_out이이

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; 
    } 
+0

심판

DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); // Output parameters specify the size of the return data. db.AddOutParameter(dbCommand, "resultset_out", DbType.Object, Int32.MaxValue); 

아래처럼 PARAMS를 전달할 수 있습니다 object [1]'귀하의 명령에 – programtreasures

+0

그게 .. 나는 Listtype 문자열이 동일한 방법이 있습니다. 해당 메서드 코드는 다음과 같습니다. public static List GetAll (string listType) {Database db = DatabaseFactory.CreateDatabase(); DbCommand objComm = db.GetStoredProcCommand ("package name.procedurename", 새 개체 [1], listType); var result = new List (); (IDataReader rdr = db.ExecuteReader (objComm)) while (rdr.Read()) { result.Add (Construct (rdr)); } } 반환 결과; } –

+0

public static List GetAll (string listType) { 데이터베이스 db = DatabaseFactory.CreateDatabase(); DbCommand objComm = db.GetStoredProcCommand ("package name.procedurename", 새 개체 [1], listType); var 결과 = 새 목록 (); (IDataReader rdr = db.ExecuteReader (objComm)) { while (rdr.Read()) { result.Add (Construct (rdr)); } } 반환 결과; }이 코드는 정상적으로 작동합니다. –

답변

1

이 파일을, 당신은`새로운 기능 https://msdn.microsoft.com/en-us/library/ff647630.aspx

+0

입니다. 이런 식으로 해봅시다. 나는 DbCommand 같은 이전 개발자가 작성한 여러 가지 방법을 가지고 있습니다. objComm = db.GetStoredProcCommand ("package name.procedurename", 새 객체 [1]); 그리고 그 방법에 오류가 직면하지만이 DbCommand objComm = db.GetStoredProcCommand ("패키지 name.procedurename", 새 개체 [1], listType); –

+0

이제 IDataReader rdr = db.ExecuteReader (objComm))를 사용하여이 줄에서 동일한 오류가 발생했습니다 ... 모든 제안 ?? IDataReader 옆에 데이터를 검색하는 데 사용할 수있는 다른 메서드가 있습니까 ?? –