-1

我有以下代码:

更新

 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(数字类型)当它到达这一行时 da.Fill(ds, "tbl");,程序会继续捕获。我的问题是如何防止它,以便表格真正更新?希望得到帮助,谢谢!

4

3 回答 3

1

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

where ArticleId='{3}'

有了这个:

where ArticleId={3}

因此,您的 where 子句应如下所示:

"update tblArticles set ArticleTitle='{0}', ArticleBody='{1}',PostDate='{2}'  where ArticleId={3}"
于 2013-01-11T07:46:15.757 回答
1

如果ArticleId是数字数据类型,则必须删除它周围的引号。代替:

 where ArticleId='{3}'

试试这个:

 where ArticleId = {3}

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

于 2013-01-11T07:46:17.297 回答
0

参数插入是一个坏主意。这是为sql injection. 使用参数而不是参数插入。Sql 参数对于快速查找错误也很有用。因为参数是强类型的,并且您不能将字符串作为数字参数的参数传递。

于 2013-01-11T07:51:12.927 回答