2013-05-01 3 views
0

Я хотел бы сделать какое-то замедленный откат (не в пакете) в образце с # настольным приложением 1 кнопка вставляет данные, другие рулоны его обратноЗадержка откат (ado.net) не работает

Я попытались ниже, но он не работает

error: The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION. 

.

private void button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection conn = new SqlConnection(ConnectionString); 
     //conn = new SqlConnection(ConnectionString); 
     conn.Open(); 
     try 
     { 
      //tran = conn.BeginTransaction("Transaction1"); 
      SqlCommand cmd = new SqlCommand("begin transaction", conn); 
      SqlCommand cmd1 = new SqlCommand("insert into employee values ('6','aaaaaa','111')", conn); 
      cmd.ExecuteNonQuery(); 
      cmd1.ExecuteNonQuery(); 
      conn.Close(); 

     } 
     catch { } 
    } 
    private void button2_Click(object sender, EventArgs e) 
    { 
     SqlConnection conn = new SqlConnection(ConnectionString); 
     conn.Open(); 
     SqlCommand cmd2 = new SqlCommand("rollback transaction", conn); 
     cmd2.ExecuteNonQuery(); 
     conn.Close(); 
    } 

Является ли то, что я пытаюсь даже сделать возможным? или я просто иду по нему не так?

+0

Вы что-нибудь придумали? – granadaCoder

+0

Пока соединение разделяется между двумя кнопками, оно работает. Как только вы закрываете и снова открываете, оба пути не работают. – AngelicCore

ответ

0

Youch.

ТЕХНИЧЕСКОЕ, все, что у вас есть в button2_Click, является «новым», поэтому нет «привязки назад» к исходному заявлению «начать транзакцию».

Но я действительно не думаю, что вы хотите выполнить инструкции «начать транзакцию» и «откат транзакции».

я думаю ~~ ~~ вы хотите, чтобы попытаться сделать эту переменную:

**tran** = conn.BeginTransaction("Transaction1"); 

это «Тран» переменная переменная член, сфера больше чем одной кнопки команд. (Допустим, вы сделаете это переменная-член и переименовать его в _transaction)

, а затем либо вызвать

_transaction.Rollback(); 

или

_transaction.Commit() 

Но ничего себе. Это чешуйчато. Я просто даю вам представление, если вы действительно намереваетесь это делать.

+0

:) На самом деле я начал там ... но хотел сделать это по-своему, потому что мне показалось, что это было более ручным Я думал, что это сработает, потому что я отправляю эти инструкции в движок db. и на сервере Sql эти команды не должны выполняться в одной партии – AngelicCore

+0

Я понятия не имею, действительно ли будет работать «ваш путь». Но чтобы даже попытаться это сделать, вы должны разрешить область (SqlCommand cmd = new SqlCommand («begin transaction», conn);) быть больше, чем просто командная кнопка. По крайней мере, это должна быть переменная-член. Вы получаете ошибку, потому что первый cmd выпадает из области действия после кнопки button_click, поэтому button_2 «rollback tran» не знает, о чем вы говорите, и, следовательно, ваша ошибка. – granadaCoder

+0

попробует это и вернется к вам – AngelicCore

Смежные вопросы