【问题标题】:SqlCeDataReader Read(); Iterates and Iterates some number of timesSqlCeDataReader 读取();迭代和迭代一些次数
【发布时间】:2014-03-23 15:17:03
【问题描述】:

我正在使用 SQL Server Compact Edition 编写应用程序,其中我的程序将一些数据从某处插入到本地数据库。我的数据库表有如下列:username, enterdate, exitdate... 等等。

现在我正在尝试读取我的数据的特殊行,然后将该行添加到列表视图,但是当我使用SqlCeDataReader 及其Read(); 方法时,它会将重复项添加到我的列表视图中。例如,如果我需要的行位于数据库的第 9 个索引处,我的意思是当我想要的行位于数据库的第 9 行时,当我使用 SELECT 它使用 WHERE 然后我阅读它时,它添加了 9具有相同行数据的重复项,我需要到我的列表视图。

我使用的是 Microsoft Visual Studio 2008 Express Edition。

Con.ConnectionString = "data source = |datadirectory|\\RoomDataBase.sdf";
Con.Open();
cmd.Connection = Con;
cmd.CommandText = "SELECT * FROM room WHERE username = '" + user + "'";

SqlCeDataReader reader1 = cmd.ExecuteReader();

if (reader1.Read() )
{
       dblogger(user + " Entered and WAS in list");
       //my problem happens here that the above line iterates
}

dblogger 是一个将字符串添加到列表视图的 void

其实我的问题是if{....}的内部会反复迭代到数据库中的行数

我必须告诉你,当我 SELECT 使用 WHERE 从数据库中获取数据时,我确信只有一行符合条件,所以为了确定一切,问题出在 Read() 过程中。

我必须提到你,这个问题要么发生在我使用SqlCeResultSet,然后使用它ReadFirst();。

特别感谢知道答案的人。

【问题讨论】:

    标签: c# sql-server sql-server-2005 sqldatareader sqlcedatareader


    【解决方案1】:

    您错误地使用了 DataReader。 read 方法用于将 DataReader 推进到下一行。 HasRows 属性将告诉您是否返回了任何结果。

    尝试以下方法:

         if (reader1.HasRows)
         {
             dblogger(user + " Entered and WAS in list");
         }
    

    【讨论】:

    • 谢谢,但是当我尝试使用 HasRows 时,它说它必须是 Scrollabel,我怎样才能将其 Option 更改为 scrollabe?
    • 我用 SqlCeResultSet 测试了 HasRow 属性,但我仍然遇到同样的问题。
    • 我不确定 IDE 为什么会这样告诉你。你可以试试 DataReader 的 ExecuteScalar 方法,它只会返回结果集的第一行。
    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2016-02-04
    相关资源
    最近更新 更多