C#MySQL - “更新”正在选择每一行/所有内容

时间:2013-10-12 19:28:22

标签: c# mysql asp.net sql

我的问题是每当我尝试在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

希望你能帮助我。

3 个答案:

答案 0 :(得分:2)

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

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

答案 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";

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