0

トランザクションを使用して、異なるデータベース テーブルを追加しています。追加するResponse.redirect("");とエラーが発生します:SQLTransaction complete; is no longer available.response.redirectを削除すると、エラーなしで正常に動作しています。

protected void btnEkle_Click(object sender, EventArgs e)
        {
            SqlConnection baglanti = system.baglan();
            SqlCommand Trans_isl1 = new SqlCommand("Insert TblDetay (Ad,Yerler,Ulasim,Resim,Durum) values(@Ad,@Yerler,@Ulasim,@Resim,@Durum)", baglanti);

            Trans_isl1.Parameters.Add("@Ad", "deneme");
            Trans_isl1.Parameters.Add("@Yerler", "sdfgjkj");
            Trans_isl1.Parameters.Add("@Ulasim", "ads1");
            Trans_isl1.Parameters.Add("@Resim", "1.jpg");
            Trans_isl1.Parameters.Add("@Durum", true);

            SqlTransaction sqlTrans = baglanti.BeginTransaction(); // Transaction nesnesine işlemleri eşitliyoruz.
            Trans_isl1.Transaction = sqlTrans; 
            try
            {  
                 Trans_isl1.ExecuteNonQuery();
                 sqlTrans.Commit();
                 Response.Redirect("second.aspx?id="+ Session["id"]);
            }

            catch (Exception hata)
            { 
                Response.Write("İşleminiz yapılamadı, Oluşan Hatanın Detayı<br />" + hata);
                sqlTrans.Rollback();  
            }

            finally
            {  
                baglanti.Close();
                baglanti.Dispose();
                Trans_isl1.Dispose(); 
            }



        }
4

1 に答える 1

0

Response.Redirect は Response.End を呼び出します。これは ThreadAbortException をスローします。これは catch ブロックによってキャッチされ、トランザクションが既にコミットされているため、ロールバックは発生しません。代わりに Server.Transfer を使用するか、Response.End を呼び出すかどうかを指定できる Response.Redirect のオーバーロードを使用できます。

詳細については、このリンクを参照してください http://support.microsoft.com/kb/312629

于 2014-05-13T01:31:14.070 に答える