更新表中的值: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");
时,程序继续捕捉。我的问题是如何防止它,这样表才会真正更新?希望帮助,谢谢!
由于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参数对于快速查找错误也很有用。因为参数是强类型的,你不能把字符串作为参数传递给数字参数