我正试图从facebook获取所有数据
但是我收到了错误
索引超出了数组的范围
代码:
public void Comments(string cmtid)
{
var accessToken = "***********";
var client = new FacebookClient(accessToken);
clientfeed = client.Get(cmtid).ToString();
JObject obj = JObject.Parse(clientfeed);
JArray datas = (JArray)obj["data"];
for (int i = 0; i < datas.Count; i++)
{
if (obj["data"][i]["message"] != null)
{
strPostComment = obj["data"][i]["message"].ToString();
if (strPostComment.Contains("'"))
{
strPostComment = strPostComment.Replace("'", "''");
}
strPostCommentId = obj["data"][i]["id"].ToString();
strPostCommentNameId = obj["data"][i]["from"]["id"].ToString();
strPostCommentName = obj["data"][i]["from"]["name"].ToString();
splitCommentId = strPostCommentId.Split('_');
strPostCommentdate = obj["data"][i]["created_time"].ToString();
if (strPostCommentdate.Contains("T"))
{
strPostCommentdate = strPostCommentdate.Replace("T", " ");
}
abccommenttime = strPostCommentdate.Substring(0, strPostCommentdate.ToString().Length - 5);
if (strPostCommentName == "IIPL BANK")
{
IIPLCustomer(strPostCommentNameId, abccommenttime);
}
else
{
Customer(strPostCommentNameId);
}
if (datas.Count != 0)
{
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[2] + "'", DbConnection);
OleDbDataReader DbReader = DbCommand.ExecuteReader();
while (DbReader.Read())
{
count = DbReader[0].ToString();
cnt = Convert.ToInt32(count);
if ((cnt == 0) && (strPostComment != ""))
{
DbCommand = new OleDbCommand("insert into mw_response(post_id,response,response_id, resp_date,community) values('" + splitCommentId[1] + "','" + strPostComment + "','" + splitCommentId[2] + "', to_date('" + abccommenttime + "', 'yyyy-mm-dd hh24:mi:ss'),'" + fb_community + "')", DbConnection);
DbCommand.ExecuteNonQuery();
//update productid and customerid
DbCommand = new OleDbCommand("update mw_response set prod_id = (select prod_id from mw_post where post_id='" + splitCommentId[1] + "'),customer_id = (select customer_id from mw_customer where customer_id = '" + strPostCommentNameId + "') where response_id = '" + splitCommentId[2] + "'", DbConnection);
DbCommand.ExecuteNonQuery();
if (strPostCommentName != "IIPL BANK")
{
//calling comment web service
createComment(splitCommentId[2]);
}
}
}
DbReader.Close();
}
}
}
}
这是Indes终止的代码超出了数组的范围
if (datas.Count != 0)
{
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[2] + "'", DbConnection);
OleDbDataReader DbReader = DbCommand.ExecuteReader();
}
答案 0 :(得分:0)
您尝试访问 splitCommentId 中索引 2 的数据,而不检查此处是否存在数据:
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[2] + "'", DbConnection);
你可以这样做
if (datas.Count != 0 && splitCommentId.length >= 3)
{
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[2] + "'", DbConnection);
OleDbDataReader DbReader = DbCommand.ExecuteReader();
}
答案 1 :(得分:0)
在以下行
splitCommentId = strPostCommentId.Split('_');
检查splitCommentId的长度。它将是2.这意味着在下面的行
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[2] + "'", DbConnection);
splitCommentId [2] 将不会出现。因此错误。如果你想访问第二个元素,那么就像这样做
DbCommand = new OleDbCommand("select count(response_id) from mw_response where response_id = '" + splitCommentId[1] + "'", DbConnection);
您的代码 createComment(splitCommentId [2]); 也会抛出异常。