Нужна помощь в диагностике SQL IndexOutOfRangeException и SQLException - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь вернуть список клиентов с соответствующими продуктами или типами оплаты.Я могу вернуть клиентов самостоятельно, но не с помощью встроенных / расширенных информационных запросов.Я довольно новичок в кодировании, поэтому объемные сообщения об ошибках ничего не значат для меня, так как я не знаю, как их интерпретировать.Я получил 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"))
            };

Текущий код показан выше.

Любой, кто может направить меня или предложить понимание того, как понять или выяснить сообщения об ошибках, очень ценится!Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...