-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はAUTOINCREMENT(数値タイプ)です。この行 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 に答える