首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在从未在MessageBox中显示的OleDb查询中检索数据

正在从未在MessageBox中显示的OleDb查询中检索数据
EN

Stack Overflow用户
提问于 2009-12-17 02:54:28
回答 5查看 490关注 0票数 0

下面的代码没有异常错误,这可能意味着我的sql语句没有问题。但是,在尝试验证它是否返回任何值时,我将返回的项传递给一个字符串值,并尝试将其显示在一个消息框中。

我面临的问题是,消息框只显示列的名称,而不显示从表中请求的数据。

可能的问题是什么?如果有更好的方法来解决这个问题,请给我建议。

代码语言:javascript
复制
    public void DisplayPurchase(OleDbConnection mDB)
    {
        openDB();
        string sqlQuery;
        OleDbCommand cmd;
        OleDbDataReader rdr;



        sqlQuery = "SELECT CustomerTable.[Youth ID], CustomerTable.Firstname, " +
            "CustomerTable.Lastname, Youth.Purchaseid, Youth.NumbersOfSport, " + 
            "Youth.Price, Youth.TotalCostOfTraining, Youth.PercentageDiscount, " +
            "Youth.AmountDue, Youth.DatePurchased" +
            " FROM CustomerTable, Youth WHERE Youth.YouthID = CustomerTable.[Youth ID]" +
            " AND CustomerTable.[Youth ID] = 7";

        try
        {
            cmd = new OleDbCommand(sqlQuery, mDB);

            rdr = cmd.ExecuteReader();
            if (rdr.HasRows)
            {
                qtyInt1 = (int)rdr["Youth.NumbersOfSport"];
                youthInt1 = (int)rdr["CustomerTable.[Youth ID]"];
                firstStr1 = (string)rdr["CustomerTable.Firstname"];
                purStr1 = (string)rdr["Youth.Purchaseid"];
                lastStr1 = (string)rdr["CustomerTable.Lastname"];
                priceStr1 = (string)rdr["Youth.Price"];
                totalCstStr1 = (string)rdr["Youth.TotalCostOfTraining"];
                discountStr1 = (string)rdr["Youth.PercentageDiscount"];
                amtDueStr1 = (string)rdr["Youth.AmountDue"];
                //purDate1 = (DateTime)rdr["Youth.DatePurchased"];

                MessageBox.Show(firstStr1.ToString());

                closeDB();

            }
            else
            {
                MessageBox.Show("Reader has no rows");
                closeDB();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


    }

谢谢

EN

回答 5

Stack Overflow用户

发布于 2009-12-17 02:59:53

我确信您必须先调用rdr.Read(),然后才能访问其中的任何数据。因此,将其作为if(rdr.HasRows())之后的第一行添加

票数 3
EN

Stack Overflow用户

发布于 2009-12-17 03:00:24

您需要在读取器上调用Read()来读取第一行。

代码语言:javascript
复制
if(rdr.HasRows) {
    rdr.Read();
    ...

谨致问候,

Fabian

票数 1
EN

Stack Overflow用户

发布于 2009-12-17 03:01:22

您是否尝试过:

代码语言:javascript
复制
firstStr1 = (string)rdr["Firstname"];

datareader中的字段名通常不包括表名前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1916848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档