0

我在网格视图中绑定数据库中的数据。但在数据源“CountryList”中,仅从数据读取器添加偶数行。这段代码有什么问题?

using (cmd)
{
    cmd.CommandType = CommandType.StoredProcedure;
    cn.Open();
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        if (dr.HasRows)
        {
            while (dr.Read())
            {
                CountryList.Add(ParseDataReader(dr));
            }

            cn.Close();
            return CountryList;

        }
    }
}

Parse 方法是:

public static  Countries ParseDataReader(SqlDataReader dr)
    {
        Countries MyCountries = new Countries();

        dr.Read();

            if (dr["CountryID"]!=DBNull.Value )
            {
                MyCountries.CountryID = (int)dr["CountryID"];
            }
            if (dr["Code"]!=DBNull.Value)
            {
                MyCountries.Code = dr["Code"].ToString();
            }
            if (dr["Name"]!=DBNull.Value)
            {
                MyCountries.Name = dr["Name"].ToString();
            }
            if (dr["RequiresState"]!= DBNull.Value)
            {
                MyCountries.RequiresState = (bool)dr["RequiresState"];
            }
            if (dr["Order"]!=DBNull.Value)
            {
                MyCountries.Order = (decimal)dr["Order"];
            }

        return MyCountries;
    }

仅供参考:我的存储过程返回正确的行数。但数据读取器仅从结果中读取偶数行。

4

3 回答 3

4
public static  Countries ParseDataReader(SqlDataReader dr)
{
    Countries MyCountries = new Countries();
    //dr.Read(); // << remove this

你打dr.Read()了两次电话。

于 2013-01-07T07:53:21.677 回答
1

ParseDataReader 中有什么代码?dr.Read()请注意,您应该每行只调用一次,并且while()足够了。

于 2013-01-07T07:35:16.773 回答
0

好吧,感谢您没有显示相关代码。

显然这是错误的。如果 DR 会读取每 2 行 - 好吧,很多人会意识到这一点。

发生这种情况有两种可能的方式:

  • ParseDataaReader 进行 dr.read (因此每一行都会跳过一行)
  • 存储过程不会返回您认为它返回的数据(因此您甚至不会发送您认为的所有行)。

简单的。

请验证。


更新:而且,你能阅读你发布的内容吗?ParseDataReader 方法中有一个 dr.READ 调用。所以,你转发一个,然后 ParseDataaReader 转发一个(跳过行)并解析它。

于 2013-01-07T07:38:26.633 回答