У меня очень простое утверждение выбора, но я не могу на всю жизнь понять, что не так. Я OBV замаскировал свою реальную базу данных и имя сервера для сообщения.
public List<Customer> CustomersGetAll()
{
var customers = new List<Customer>();
Customer customer;
using (var command = new SqlCommand())
{
command.Connection = _connection;
command.CommandText =
" SELECT Id, Reference, Name, SupplierGln, GLN, UseCustomerProductCodes, IncludeBranchInvoices, RequireBuyerOrderNoAndDate, RequireQuantityOfTradedUnits, " +
"RequireQuantityOfTradedUnits, DefaultBranchCode FROM Customer ORDER BY Reference ";
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
customer = new Customer();
customer.ID = (int)reader["Id"];
customer.Reference = (string)reader["reference"];
customer.Name = (string)reader["Name"];
customer.SupplierGLN = (string) reader["SupplierGLN"];
customer.GLN = (string)reader["GLN"];
customer.IncludeBranchInvoices = (bool)reader["IncludeBranchInvoices"];
customer.UseBuyerProductCodes = (bool)reader["UseCustomerProductCodes"];
customer.RequireBuyerOrderNoAndDate = (bool)reader["RequireBuyerOrderNoAndDate"];
customer.RequireReturnToSupplierNoForCredit = (bool)reader["RequireQuantityOfTradedUnits"];
customer.RequireQuantityOfTradedUnits = (bool)reader["RequireQuantityOfTradedUnits"];
customer.DefaultBranchCode = reader["DefaultBranchCode"] as string;
foreach (var productCode in CustomerProductCodesGetByCustomerID(customer.ID))
{
customer.ProductCodes.Add(productCode.Key, productCode.Value);
}
foreach (var branchCode in GetCustomerBranchCodes(customer.ID))
{
customer.BranchCodes.Add(branchCode.Key, branchCode.Value);
}
customers.Add(customer);
}
}
}
return customers.ToList();
}
Я использую SQL Server 2017 Express, и в качестве строки подключения используется следующее:
public DatabaseEngine(string databasePath)
{
try
{
_connectionString = string.Format("Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True;", @"MACHINENAME\SQLEXPRESS2017", "DBNAME");
_connection = new SqlConnection(_connectionString);
_connection.Open();
}
catch
{
if (_connection != null)
{
_connection.Close();
_connection = null;
}
throw;
}
}
Эта процедура вызывает ошибку, показанную ниже:
/// </summary>
private void LoadCustomers()
{
cboCustomers.Items.Clear();
_customers = _database.CustomersGetAll();
if (_customers != null)
{
foreach (Customer customer in _customers)
{
cboCustomers.Items.Add(customer);
}
}
}
Что все работает, и это нормально подключается к базе данных, но я получаю следующую ошибку, я уже попробовал следующее
MultipleActiveResultSets=True;
Какое рекомендуемое исправление для приведенной ниже ошибки, но это не происходит для меня?.
Уже есть открытый DataReader, связанный с этой командой, который должен быть закрыт первым.
Редактировать 1
Таким образом, я запустил свой вышеупомянутый запрос, и я все еще получаю ту же ошибку, что и выше, я перезагружаю коробку sql на случай, если что-то удерживается, поскольку его нет.
public List<Customer> CustomersGetAll()
{
var customers = new List<Customer>();
Customer customer;
using (var connection = new SqlConnection(_connectionString))
{
string sql =
" SELECT Id, Reference, Name, SupplierGln, GLN, UseCustomerProductCodes, IncludeBranchInvoices, RequireBuyerOrderNoAndDate, RequireQuantityOfTradedUnits, " +
"RequireQuantityOfTradedUnits, DefaultBranchCode FROM Customer ORDER BY Reference ";
using (var command = new SqlCommand(sql,connection))
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
customer = new Customer();
customer.ID = (int)reader["Id"];
customer.Reference = (string)reader["reference"];
customer.Name = (string)reader["Name"];
customer.SupplierGLN = (string)reader["SupplierGLN"];
customer.GLN = (string)reader["GLN"];
customer.IncludeBranchInvoices = (bool)reader["IncludeBranchInvoices"];
customer.UseBuyerProductCodes = (bool)reader["UseCustomerProductCodes"];
customer.RequireBuyerOrderNoAndDate = (bool)reader["RequireBuyerOrderNoAndDate"];
customer.RequireReturnToSupplierNoForCredit = (bool)reader["RequireQuantityOfTradedUnits"];
customer.RequireQuantityOfTradedUnits = (bool)reader["RequireQuantityOfTradedUnits"];
customer.DefaultBranchCode = reader["DefaultBranchCode"] as string;
foreach (var productCode in CustomerProductCodesGetByCustomerID(customer.ID))
{
customer.ProductCodes.Add(productCode.Key, productCode.Value);
}
foreach (var branchCode in GetCustomerBranchCodes(customer.ID))
{
customer.BranchCodes.Add(branchCode.Key, branchCode.Value);
}
customers.Add(customer);
}
}
}
}
return customers.ToList();
}