2013-07-16 2 views
0

У меня есть две таблицы в моей базе данных: студенты и учетные записи. В моем приложении я пытаюсь читать данные из нескольких таблиц с помощью метода reader.GetDecimal() и не удается получить данные из второй таблицы.Как использовать reader.GetDecimal() для столбца в отдельной таблице?

Возможно ли это с помощью метода GetDecimal? Или мне нужно добавить к одному из запросов, чтобы получить то, что мне нужно, из таблицы Accounts?

Таблицы базы данных:

Accounts

Accounts

Студент Student

Код:

  //Query Student table for bAlertSetup 
      SqlCeCommand AlertQuery = new SqlCeCommand("SELECT * from Students AND Accounts", conn); 
      reader = AlertQuery.ExecuteReader(); 

      while (reader.Read()) 
      { 
       bSinglePersonAlertSetup = reader.GetBoolean(5); 

       if (bSinglePersonAlertSetup == true) 
       { 
        int AccountID = reader.GetInt32(7); 
        decimal Threshold = reader.GetDecimal(6); 
        //decimal Total = get decimal from the accounts table where accountID (in the accounts table) = AlertAccountID 

        //See if Students account is below the defined threshold 
        if (Total < Threshold) 
        { 
         StudentEmailAddress = reader.GetString(3); 

         if (StudentEmailAddress != null) 
         { 
          Console.WriteLine(StudentEmailAddress); 
          mail.To.Add(StudentEmailAddress); 

          //Update bAlertSetup 
          SqlCeCommand UpdateBool = new SqlCeCommand("UPDATE Students set bSendAlert = 0 WHERE UserId = @ID"); 
          UpdateBool.Parameters.AddWithValue("@ID", reader.GetInt32(0)); 
          UpdateBool.Connection = conn; 
          UpdateBool.ExecuteNonQuery(); 
         } 
        }  
       } 

EDIT:

Вот новый запрос я использую, что я считаю, правильно соединяет две таблицы с колонками необходимо. Теперь, как мне получить индекс каждого столбца для использования в методе GetDecimal()?

SqlCeCommand AlertQuery = new SqlCeCommand("SELECT st.bAlertSetup, st.AccountThreshold, st.AlertAccountID, acc.AccountID, acc.AccountTotal FROM Students st INNER JOIN Accounts acc ON st.AlertAccountID = acc.AccountID", conn); 
+0

Попробуйте это: read.GetDecimal (6) .ToString(). – Marek

+0

Вам нужно отредактировать свой запрос здесь, чтобы получить столбец со второй таблицы. – Ehsan

+0

Я считаю, что часть в настоящее время работает правильно, как это. Проблема, с которой я сталкиваюсь, заключается в получении соответствующих «AccountID» и «AccountTotal» из таблицы «Аккаунты». –

ответ

1
SqlCeCommand AlertQuery = new SqlCeCommand("SELECT S.*,A.AccountTotal from Students S Inner Join Accounts A ON S.AlertAccountID = A.AccountID"); 

Убедитесь, что выполнить запрос в SQL и знайте индекс каждого столбца, чтобы указать правильный индекс, или заменить S. * на S. [FieldName] для каждой разделенной запятой и чтобы порядок ваших столбцов всегда сохранялся в запросе.

+0

Если я определяю каждый столбец, который я хочу в запросе, например S.AccountThreshold, S.AlertAccountID. Будет ли индекс, который я использую для метода GetDeimal(), соответствует порядку, который я перечисляю в запросе? Поэтому я бы использовал GetDecimal (0), чтобы найти AccountThreshold? –

+1

Точно, если S.AccountThreshold сначала входит в ваш запрос, то он находится в индексе 0 –

+0

Он отлично работал. Большое спасибо! –

1

Вы должны правильно соединить две таблицы в своем запросе и выбрать только отдельные столбцы, которые вам нужны. Так что ваш запрос может быть что-то вроде ниже ...

SELECT st.UserID, st.FirstName, st.LastName, acc.AccountName, acc.AccountTotal 
FROM Student st 
JOIN Accounts acc 
ON st.AlertAccountID = acc.AccountID 

Вы можете получить AccountTotal затем по имени, как это ...

decimal total = reader.GetDecimal("AccountTotal"); 
+0

Я получаю a не может преобразовать строку к ошибке int во время компиляции. Есть ли способ получить индекс в таблице из имени столбца? –