我的问题是每当我尝试在CMS中更新时,它只会更新每一列/行。
例如:
我更新Test 1 -> Test 2
同时我有测试4
但是测试4 - >测试2由于我将测试1更改为2,它只是改变了它。
他们仍然可以正确地使用ID,当我删除它们时,它们会单独删除,因此唯一与所有内容重叠的功能就是更新。
我现在将发布我的代码(这是我学到的,不评论安全性或w / e)只需修复此问题,因此它只更新选定的ID行。
首先:
public DataRow GetById(string ID)
{
strSQL = "SELECT ID, clnOverskrift, clnTekst "
+ "FROM tblForside "
+ "WHERE ID=@ID";
objCMD = new MySqlCommand(strSQL);
objCMD.Parameters.AddWithValue("@ID", ID);
return objData.GetData(objCMD, objCon).Rows[0];
}
public void Update(PropertyForside Pro)
{
strSQL = "UPDATE tblForside SET "
+ " clnOverskrift=@Overskrift, clnTekst=@Tekst ";
objCMD = new MySqlCommand(strSQL);
objCMD.Parameters.AddWithValue("@Overskrift", Pro.Overskrift);
objCMD.Parameters.AddWithValue("@Tekst", Pro.Tekst);
objData.ModifyData(objCMD, objCon);
}
我将使用GetById和Update这就是为什么我包括两者。 如果你需要在这个“工厂”了解更多,我会发布它。
我明白了:
FactoryForside fac = new FactoryForside();
PropertyForside Pro = new PropertyForside();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataRow dr = fac.GetById(Request.QueryString["ID"]);
txtOverskrift.InnerText = dr["clnOverskrift"].ToString();
txtText.InnerText = dr["clnTekst"].ToString();
}
}
protected void btnGem_Click(object sender, EventArgs e)
{
Pro.Overskrift = txtOverskrift.InnerText;
Pro.Tekst = txtText.InnerText;
Pro.ID = int.Parse(Request.QueryString["ID"]);
fac.Update(Pro);
Response.Redirect("RedigerForside.aspx");
}
我使用InnerText将TextAreas与NiceEdit一起使用。
添加新的工作,并如前所述删除 - 只有这个更新的东西不能正常工作。
它在浏览器中正确显示ID "EditForside.aspx?id=13"
,但它似乎也选择了所有其他ID
希望你能帮助我。
答案 0 :(得分:2)
您的UPDATE语句必须包含WHERE条件 - 与您在select中使用的条件相同。然后它将仅更新该特定行。如果没有WHERE,它会更新表中的每一行。
答案 1 :(得分:0)
原因可能是因为您未在where
子句中提供update
条件。因此,如果您在where
语句中未提供update
条件,则最终会更新表格的每一行。
尝试这样的事情:
strSQL = "UPDATE tblForside SET "
+ " clnOverskrift=@Overskrift, clnTekst=@Tekst "
+ " WHERE ID=@ID";
答案 2 :(得分:0)
您需要在更新语句中提供WHERE
子句。例如。
strSQL = "UPDATE tblForside SET "
+ " clnOverskrift=@Overskrift, clnTekst=@Tekst "
+ " WHERE ID=@ID";
这限制了哪些行将被更新。