-2

次のようなコードでエラーを取得してループする場合

インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。

public void postM()
{
    for (int i = 0; i < listCustomer.Count; i++)
    {
        var grt = listCustomer[i];
        id = grt.UserId;

        //When the loops come second time

        for (int j = 0; j < listPost.Count; j++)
        {
            //Here I'm getting the above error
            var grt1 = listPost[i];
            postId = listPost[i].PostId;
            posts1 = listPost[i].Posts;
            postTime = listPost[i].PostTimeStamp;

            DbConnection.Open();
            DbCommand = new OleDbCommand("select count(*) from mw_post where post_id = '" + postId + "'", DbConnection);
            OleDbDataReader DbReader1 = DbCommand.ExecuteReader();
            while (DbReader1.Read())
            {
                count = DbReader1[0].ToString();
                cnt = Convert.ToInt32(count);
                if ((cnt == 0) && (posts != ""))
                {
                    DbCommand = new OleDbCommand("insert into mw_post(post_id,customer_id,post,post_date,community) values('" + postId + "','" + id + "','" + posts1 + "', '" + postTime + "','LinkedIn')", DbConnection);
                    DbCommand.ExecuteNonQuery();

                    if (posts.ToUpper().Contains("Personal Loan".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '2',customer_id='" + id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else if (posts.ToUpper().Contains("Credit Card".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '1',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else if (posts.ToUpper().Contains("Home Loan".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '3',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else if (posts.ToUpper().Contains("Car Loan".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '4',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else if (posts.ToUpper().Contains("Deposit".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '5',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else if (posts.ToUpper().Contains("Debit Card".ToUpper()))
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '7',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                    else
                    {
                        DbCommand = new OleDbCommand("UPDATE mw_post set prod_id = '6',customer_id='" + user_id + "' where post = '" + posts + "'", DbConnection);
                        DbCommand.ExecuteNonQuery();
                    }
                }
            }
            DbReader1.Close();
            DbConnection.Close();
        }
    }
}

ここでループを設定するには?

4

3 に答える 3

5

iに変更j:

var grt1 = listPost[j];
postId = listPost[j].PostId;
posts1 = listPost[j].Posts;
postTime = listPost[j].PostTimeStamp;

iは for のイテレータとして使用され、 forlistCustomerjあるためlistPost、境界を超えました。

于 2013-07-02T13:11:57.373 に答える
0

これは:

var grt1 = listPost[i];
postId = listPost[i].PostId;
posts1 = listPost[i].Posts;
postTime = listPost[i].PostTimeStamp;

代わりにこれになります:

var grt1 = listPost[j];
postId = listPost[j].PostId;
posts1 = listPost[j].Posts;
postTime = listPost[j].PostTimeStamp;
于 2013-07-02T13:12:20.293 に答える
0

あなたの問題は、listPostsをループしているときに、「j」を使用してループしているが、「i」でアイテムを参照しているようです。「i」が大きくなる (listPost.Count より大きい) と、見たエラーで BOOM になります。

于 2013-07-02T13:12:56.397 に答える