更新表中的值:APSX

本文关键字:APSX 更新 | 更新日期: 2023-09-27 17:52:39

我有以下代码:

 try
    {
        ArticleId = Request.QueryString["ArticleId"].ToString();
        NewArticleTitle = Request.Form["ArticleTitle"].ToString();
        NewArticleDate = Request.Form["ArticleDate"].ToString();
        NewArticleBody = Request.Form["ArticleBody"].ToString();

        string dpath = Server.MapPath(@"App_Data") + "/MySite.mdb";
        string connectionstring = @"Data source='" + dpath + "';Provider='Microsoft.Jet.OLEDB.4.0';";
        OleDbConnection con = new OleDbConnection(connectionstring);
        string QuaryString = String.Format("update tblarticles set articletitle='{0}', articlebody='{1}', postdate='{2}'  where articleid={3}", NewArticleTitle, NewArticleBody, NewArticleDate, ArticleId);
        OleDbCommand cmd = new OleDbCommand(QuaryString, con);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        da.Fill(ds, "tbl");
        con.Close();
        Response.Redirect("ArticlesTable.aspx");
    }
        catch { }

ArticleId是一个AUTO INCREMENT (number类型)当它到达这行da.Fill(ds, "tbl");时,程序继续捕捉。我的问题是如何防止它,这样表才会真正更新?希望帮助,谢谢!

更新表中的值:APSX

由于ArticleId是数字,因此您需要替换此:

where ArticleId='{3}'
与这个:

where ArticleId={3}

where子句应该是这样的

"update tblArticles set ArticleTitle='{0}', ArticleBody='{1}',PostDate='{2}'  where ArticleId={3}"

如果ArticleId是数据类型数值,那么您必须删除它周围的引号。而不是:

 where ArticleId='{3}'

试试这个:

 where ArticleId = {3}

但是,你不应该这样做。尝试使用准备好的语句或参数化查询,而不是使用String.Format

插入参数是个坏主意。这是为sql injection打开的潜在有害代码。使用形参代替实参插入。Sql参数对于快速查找错误也很有用。因为参数是强类型的,你不能把字符串作为参数传递给数字参数