0

バックエンドとして Asp.net c# と MYSql を使用しています。テーブルを更新していますが、テーブルが更新されていません。テーブルには 3 つの列しかありません。

コマンド オブジェクトを実行しているときも例外ではありません。しかし、これは から 0 の値を返しますcmd.ExecuteNonQuery()

これをデバッグしたところ、cmd.Parameters が値でいっぱいであることがわかりました。mysqlで更新コマンドを手動で実行すると、正常に動作します。

表は次のとおりです

column -- Datatype   
ShortText -- varchar   
title -- varchar   
id -- int   

私を案内してください...

int retVal = 0;
        string shortText = ((TextBox)fmvwShortText.FindControl("txtShortText")).Text.Trim();
        try
        {
            int id = Convert.ToInt32(((Label)fmvwShortText.FindControl("lblShrtTextID")).Text);
            MySqlConnection con = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["conn"]);
            cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "UPDATE temp_posts SET ShortText=@shrtText WHERE id=@id AND Title=@title";
            cmd.Parameters.Add("@shrtText", MySqlDbType.VarChar).Value = shortText;
            cmd.Parameters.Add("@title", MySqlDbType.VarChar).Value =Session["EditTitle"].ToString();
            cmd.Parameters.Add("@id", MySqlDbType.Int32).Value = id;
            con.Open();
            retVal = cmd.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception e) { }
        return retVal;   
4

3 に答える 3

0

まず第一に、私と一緒にこの問題を解決するために最善を尽くして探し続けてくれたすべての人に感謝します..

最後に解決策を得ました。

私のコードでは、cmd.CommandText とパラメーターで @ を使用しました。 しかし、この@?に置き換えると、cmd.CommandText とパラメーターの両方で、cmd.ExecuteScalar();を使用しました。これはうまくいきました。

実際には、パラメーター名はプロバイダーによって異なります。SQL Server のプロバイダーを使用する場合は、@ で始まる必要があります (例: @param1)。Oracle プロバイダーの場合は、コロン (... の場合は aram1 など) で開始する必要があります。OleDb プロバイダーの場合は、疑問符 (?) だけで機能します

全力で貢献してくれてありがとう...どうもありがとう

しかし、ExecuteScalar() がデータベース内のレコードを更新しているという質問がまだ残っていますか? 私には答えがありません...これを探しています。

于 2012-07-09T11:39:12.300 に答える
0

Titleパラメータの大文字と小文字の問題でしょうか? IDとタイトルが正確に一致する場合にのみ更新していることに気付きましたか?

また、一般的な経験則として、実装するオブジェクトを使用するIDisposable場合は、それらをステートメントでラップする必要がありusingます。これにより、オブジェクトが常に破棄されるようになります (エラーの結果であっても)。

using (var con = new MySqlConnection(...))
{
    using (var cmd = new MySqlCommand(...))
    {
       ....
    }
}
于 2012-07-09T07:59:08.757 に答える
-1

現在ide frmwrkを使用していないため、コードのフォーマットについてこれを試してみてください

int retVal = 0;
        string shortText = ((TextBox)fmvwShortText.FindControl("txtShortText")).Text.Trim();
        try
        {
            int id = Convert.ToInt32(((Label)fmvwShortText.FindControl("lblShrtTextID")).Text);
            MySqlConnection con = new MySqlConnection(System.Configuration.ConfigurationManager.AppSettings["conn"]);
            cmd = new MySqlCommand("UPDATE temp_posts SET ShortText='"+shortText+"' WHERE id='"+id+"' AND Title='"+Session["EditTitle"].ToString()+"'",con);
            con.Open();
            retVal = cmd.ExecuteNonQuery();
            con.Close();
        return retVal;              
    }
        catch (Exception e) { }
于 2012-07-09T08:10:47.493 に答える