sql语法问题和/或代码问题? “指数数组的边界之外。”

我不得不对我的数据库进行一些重构,它看起来像这样:

数据库

但我不得不将WallPosting更改为:

WallPosting

现在我的问题是如何修复我的sql语法,以便我的代码再次工作,我现在做了一些手动条目,看看我是否可以让他们显示:

项

FriendUserID与usertable中的另一个UserID有关,他显然有不同的图片和信息,但我不知道如何显示来自不同用户atm的并发WallPosting。

我的代码创建一个动态div给div一个ID =到userid并输入名为wallpostings的wallpost消息,它获取存储的关于userid的信息并应用与该userid相关的图像,有什么方法可以用sql改变? 还是我走了一条单向的小巷? atm我只是想看看我是否可以使populatewallposts select语句工作。

我的代码:

public partial class UserProfileWall : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack) { //It is a postback so check if it was by div click (NOT WORKING because the javascript isnt posting back) string target = Request["__EVENTTARGET"]; if (target == "DivClicked") { string id = Request["__EVENTARGUMENT"]; //Call my delete function passing record id using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;")) { cn.Open(); using (OdbcCommand cmd = new OdbcCommand("DELETE FROM WallPosting WHERE idWallPosting="+id, cn)) { cmd.ExecuteNonQuery(); } } } } string theUserId = Session["UserID"].ToString(); PopulateWallPosts(theUserId); } private void PopulateWallPosts(string userId) { using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;")) { cn.Open(); using (OdbcCommand cmd = new OdbcCommand("SELECT idWallPosting, wp.WallPostings, p.PicturePath FROM WallPosting wp LEFT JOIN User u ON u.UserID = wp.UserID LEFT JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC", cn)) { using (OdbcDataReader reader = cmd.ExecuteReader()) { test1.Controls.Clear(); while (reader.Read()) { System.Web.UI.HtmlControls.HtmlGenericControl div = new System.Web.UI.HtmlControls.HtmlGenericControl("div"); div.Attributes["class"] = "test"; div.ID = String.Format("{0}", reader.GetString(0)); string id = Convert.ToString(div.ID); //store the div id as a string Image img = new Image(); img.ImageUrl = String.Format("{0}", reader.GetString(2)); img.AlternateText = "Test image"; div.Controls.Add(img); div.Controls.Add(ParseControl(String.Format("&nbsp&nbsp " + "{0}", reader.GetString(1)))); div.Attributes.Add("onclick", "confirm_delete(" + id + ");"); // send the div id to javascript div.Style["clear"] = "both"; test1.Controls.Add(div); } } } } } protected void Button1_Click(object sender, EventArgs e) { string theUserId = Session["UserID"].ToString(); using (OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;")) { cn.Open(); using (OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES (" + theUserId + ", '" + TextBox1.Text + "')", cn)) { cmd.ExecuteNonQuery(); } } PopulateWallPosts(theUserId); } } 

我得到错误:索引超出了数组的范围。

 using (OdbcCommand cmd = new OdbcCommand("SELECT wp.WallPostings, p.PicturePath FROM WallPosting wp INNER JOIN User u ON u.UserID = wp.FriendUserID INNER JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC", cn)) 

总是存储谁发布它,即使墙的主人自己做了。 这将简化您的SQL。

 SELECT wp.WallPostings, p.PicturePath FROM WallPosting wp INNER JOIN [User] u ON u.UserID = wp.PostedByUserID INNER JOIN Pictures p ON p.UserID = u.UserID WHERE wp.UserID=" + userId + " ORDER BY idWallPosting DESC 

为什么图片在1到1的单独表格中?