0

我的问题是每次我尝试在我的 CMS 中更新时,它只会更新每一列/每一行。例如:我更新Test 1 -> Test 2

同时我有测试4

但是由于我将测试 1 更改为 2,因此测试 4 -> 测试 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

希望您能够帮助我。

4

3 回答 3

2

您的 UPDATE 语句必须包含 WHERE 条件 - 与您在选择中使用的条件相同。然后它将仅更新该特定行。如果没有 WHERE,它会更新表中的每一行。

文档:http ://dev.mysql.com/doc/refman/5.0/en/update.html

于 2013-10-12T19:30:26.127 回答
0

原因可能是因为您没有where在条款中提供条件update。因此,如果您不在语句中提供where条件,update最终会更新表的每一行。

尝试这样的事情:

strSQL = "UPDATE tblForside SET "
         + " clnOverskrift=@Overskrift, clnTekst=@Tekst "
         + " WHERE ID=@ID";
于 2013-10-12T19:30:11.923 回答
0

您需要WHERE在更新语句中提供一个子句。例如

strSQL = "UPDATE tblForside SET "
         + " clnOverskrift=@Overskrift, clnTekst=@Tekst "
         + " WHERE ID=@ID";

这限制了哪些行将被更新。

于 2013-10-12T19:31:34.003 回答