0

我的数据库中有两个表:学生和帐户。在我的应用程序中,我正在尝试使用 reader.GetDecimal() 方法从多个表中读取数据,并且无法从第二个表中获取数据。

是否可以使用 GetDecimal 方法来做到这一点?或者我是否需要添加到其中一个查询以从Accounts表中获取我需要的内容?

数据库表:

账户

账户

学生 学生

代码:

            //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();
                        }
                    }     
                }

编辑:

这是我正在使用的新查询,我相信它可以正确地将两个表与所需的列连接起来。现在,如何获取要在 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);
4

3 回答 3

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");
于 2013-07-16T15:09:18.340 回答
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]以逗号分隔的每个字段,并且列的顺序将始终保留在查询

于 2013-07-16T15:13:54.557 回答
0

http://msdn.microsoft.com/en-us/library/system.data.datatablereader.getdecimal(v=vs.90).aspx

你可以用这个

decimal total = reader.GetDecimal(2); //index column name

希望能帮到你

于 2014-09-20T03:57:50.950 回答