Итак, я отправил еще один ответ, потому что понял, что обычно я использую Enterprise Library для доступа к данным, а не чистый .net, который немного меняет ситуацию.Например, DataAccessApplicationBlock (DAAB) заботится об открытии и закрытии соединения (й) с базой данных, поэтому у меня его тоже нет, поэтому я использую его как ниже.Также в этом случае более простой и эффективный способ сделать то, что описано, состоит в том, чтобы выполнить все операторы SELECT в 1 сохраненном процессе, а затем прочитать и проанализировать каждый набор результатов по одному за раз.*
Сохраненный процесс
Create PROCEDURE [dbo].[GetUserByEmail]
@UserID int,
@AccountID int,
AS
BEGIN
SET NOCOUNT OFF;
SELECT * FROM Users WHERE UserID = @UserID and AccountID = @AccountID
SELECT * FROM UserAddresses WHERE UserID = @UserID
END
C # Код:
public class DataAccessLayer
{
private static DataAccessLayer me = new DataAccessLayer();
private DataAccessLayer() { }
public static DataAccessLayer GetInstance()
{
return me;
}
public Database GetDatabase(string connectionString, string provider)
{
DbProviderFactory providerFactory = DbProviderFactories.GetFactory(provider);
return new GenericDatabase(connectionString,
providerFactory);
}
}
public class Repository
{
protected Database curDatabase;
public Repository()
{
curDatabase = DataAccessLayer.GetInstance().GetDatabase("ConnectionString", "System.Data.Odbc");
}
public Database CurrentDatabase
{
get { return curDatabase; }
}
}
public class UserRepository : Repository
{
public User GetUser(int urserID, int accountID)
{
using (IDataReader dataReader = CurrentDatabase.ExecuteReader("StroedProcName", urserID, accountID))
{
//User Details
while (dataReader.Read())
{
//Parse Data
}
dataReader.NextResult();
//User Address(es)
while (dataReader.Read())
{
//Parse Data
}
}
}
}