2017-12-17 15 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

の下にあなたのparamsを渡すことができますあなたのコマンド – programtreasures

+0

のobject [1] 'にはわかりません。私は文字列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 result = new List (); 使用(のIDataReaderのRDR = db.ExecuteReader(objComm)) {一方(rdr.Read()){ result.Add(構築物(RDR))。 } } リターン結果; }このコードは正常に動作しています。 –

答えて

1

を持っているファイルを、次のような `新機能

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

REF https://msdn.microsoft.com/en-us/library/ff647630.aspx

+0

です。このようにしてみましょう。私はこのDbCommand objComm = db.GetStoredProcCommand( " name.procedurename"、新しいオブジェクト[1])のような以前の開発者によって書かれた複数のメソッドを持っています。これらのメソッドでエラーに直面していますが、このDbCommand objComm = db.GetStoredProcCommand( "package name.procedurename"、新しいオブジェクト[1]、listType)のエラーに直面していません。 –

+0

今私は(IDataReader rdr = db.ExecuteReader(objComm))を使用してこの行で同じエラーに直面している...任意の提案?? IDataReaderの他に、データを取得するために使用できる他のメソッドはありますか? –

関連する問題