Я пытаюсь вернуть список клиентов с соответствующими продуктами или типами оплаты.Я могу вернуть клиентов самостоятельно, но не с помощью встроенных / расширенных информационных запросов.Я довольно новичок в кодировании, поэтому объемные сообщения об ошибках ничего не значат для меня, так как я не знаю, как их интерпретировать.Я получил IndexOutOfRangeException: Product Id при попытке вернуть продукты клиента и SQLException: неправильный синтаксис рядом с '.'для видов оплаты.Я думаю, что назвал и сослался на все поля данных и псевдонимы правильно, но я просто не могу узнать, что я пропускаю.
Код для клиентов с продуктами:
string command = "";
string customerColumns = @"
SELECT c.Id AS 'CustomerId',
c.FirstName AS 'CustomerFirstName',
c.LastName AS 'CustomerLastName',
c.AccountCreated AS 'DateJoined',
c.LastActive AS 'LastActive',
c.Archived";
string customerTable = "FROM Customer c";
if (include == "products")
{
string productColumns = @"
pt.Name AS 'ProductType',
p.Id,
p.Title AS 'ProductName',
p.Description AS 'ProductDescription',
p.Price AS 'ProductPrice',
p.Quantity AS 'QuantityAvailable',
p.Archived";
string productTables = @"
JOIN Product p ON p.CustomerId = c.Id
JOIN ProductType pt ON pt.Id = p.ProductTypeId";
command = $@"{customerColumns},
{productColumns}
{customerTable}
{productTables}";
}
...
cmd.CommandText = command;
SqlDataReader reader = cmd.ExecuteReader();
List<Customer> Customers = new List<Customer>();
while (reader.Read())
{
Customer currentCustomer = new Customer
{
Id = reader.GetInt32(reader.GetOrdinal("CustomerId")),
FirstName = reader.GetString(reader.GetOrdinal("CustomerFirstName")),
LastName = reader.GetString(reader.GetOrdinal("CustomerLastName")),
AccountCreated = reader.GetDateTime(reader.GetOrdinal("DateJoined")),
LastActive = reader.GetDateTime(reader.GetOrdinal("LastActive")),
Archived = reader.GetBoolean(reader.GetOrdinal("Archived"))
};
if (include == "products")
{
Product currentProduct = new Product
{
Id = reader.GetInt32(reader.GetOrdinal("Id")),
Title = reader.GetString(reader.GetOrdinal("ProductName")),
Description = reader.GetString(reader.GetOrdinal("ProductDescription")),
Quantity = reader.GetInt32(reader.GetOrdinal("QuantityAvailable")),
Price = reader.GetDouble(reader.GetOrdinal("ProductPrice"))
};
Текущий код показан выше.
Любой, кто может направить меня или предложить понимание того, как понять или выяснить сообщения об ошибках, очень ценится!Спасибо!