OleDBReader返回System.Data.Oledb.OleDbDataReader而不是值

时间:2016-01-14 14:20:18

标签: c# sql database object reader

我目前在将数据库中的某些字段退回到我的列表框时遇到了一些问题。

我返回的文本是System.Data.Oledb.OleDbDataReader,而不是我想要的数据库。

        private void lbzoektermen_MouseHover(object sender, EventArgs e)
    {

        OleDbConnection connection = new OleDbConnection();
        connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\martijn\Dropbox\Proftaak Periode 2 Identity\Database11.accdb;
        Persist Security Info=False;";
        connection.Open();


        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;
        command.CommandText = "SELECT * from Zoekcriteria";
        OleDbDataReader reader = command.ExecuteReader();

        if(reader.HasRows)
        {
            lbzoektermen.Items.Add(reader);
        }
        connection.Close();

我应该使用Overwrite Tostring方法吗?我有点困惑

亲切的问候, 马亭

2 个答案:

答案 0 :(得分:1)

您需要向阅读器添加索引才能获得其中一个字段。例如。如果你想要第一个字段,改变这样的循环:

if(reader.HasRows)
{
    lbzoektermen.Items.Add(reader[0]);
}

答案 1 :(得分:0)

下面的代码行是错误的,因为您将返回的阅读器对象添加到列表框项集合中,而您应该将reader对象附加到列表框控件的DataSource属性

lbzoektermen.Items.Add(reader);

应该是

lbzoektermen.DataSource = reader;

如果它是DataBind()应用程序,您可能还想在lbzoektermen控件上调用ASP.NET方法。

根据您的评论,由于您使用的是列表框控件,因此您需要添加单个项目。您需要更改查询并选择要添加到控件的特定列,如

command.CommandText = "SELECT * from Zoekcriteria";

更改为

command.CommandText = "SELECT columns1 from Zoekcriteria";