Как ссылаться на объект и передавать его методу в C#?
Вот мой код:
private void btnsend_Click(object sender, EventArgs e) { cn.Open();//Conncetion try { var size = textBox3.Text; var machine = comboBox1.SelectedItem.ToString(); MySqlCommand cmd = new MySqlCommand("select kgs from capacity_master where(nsize=@size and mname=@machine)", cn); cmd.Parameters.AddWithValue("@size", size); cmd.Parameters.AddWithValue("@machine", machine); using (MySqlDataReader sf = cmd.ExecuteReader()) { while (sf.Read()) { oload = double.Parse(sf[0].ToString()); } } } catch (Exception eli) { MessageBox.Show("" + eli); } MySqlTransaction el = cn.BeginTransaction();//Transaction Started From Here try { string fvno; dateTimePicker1.Value = DateTime.Now; dateTimePicker2.Value = DateTime.Now; var tdat = dateTimePicker2.Value; var ttime = dateTimePicker1.Value; fvno = textBox1.Text; MySqlCommand genvoucher = new MySqlCommand("insert into htemp(vno,bno,nsize,machine,loadqty,overload,vdate,operator,stime,shift,status) values(@vno,@bno,@size,@machine,@load,@oload,@date,@opt,@start,@shift,@status)", cn,el); genvoucher.Parameters.AddWithValue("@vno", fvno); genvoucher.Parameters.AddWithValue("@size", textBox3.Text); genvoucher.Parameters.AddWithValue("@bno", comboBox3.SelectedItem.ToString()); genvoucher.Parameters.AddWithValue("@machine", comboBox1.SelectedItem.ToString()); genvoucher.Parameters.AddWithValue("@load", textBox14.Text); var canload = oload; var doload = double.Parse(textBox14.Text); string ans; if (doload > canload) { ans = "Yes"; } else { ans = "No"; } genvoucher.Parameters.AddWithValue("@oload", ans); genvoucher.Parameters.AddWithValue("@date", tdat); genvoucher.Parameters.AddWithValue("@opt", comboBox4.SelectedItem.ToString()); genvoucher.Parameters.AddWithValue("@shift", shift); genvoucher.Parameters.AddWithValue("@start", ttime); genvoucher.Parameters.AddWithValue("@status", "Open"); genvoucher.ExecuteNonQuery(); MySqlCommand df = new MySqlCommand("insert into vouchers values(@vno,@dept,@shift,@task,@stats,@remarkn,@remarkv)", cn,el); df.Parameters.AddWithValue("@vno", textBox1.Text); df.Parameters.AddWithValue("@dept", dept); df.Parameters.AddWithValue("@shift", shift); df.Parameters.AddWithValue("@task", "HTemp"); df.Parameters.AddWithValue("@stats", "Open"); df.Parameters.AddWithValue("@remarkn", ""); df.Parameters.AddWithValue("@remarkv", ""); df.ExecuteNonQuery(); // Method To Do Other SQL Transaction batchprocess2(); MessageBox.Show("Voucher Opened Successfully!"); el.Commit();//Transaction Committed Here this.Close(); } catch (Exception eli) { MessageBox.Show("Can't Generate Voucher" + Environment.NewLine + eli); try { el.Rollback();//Rollbacked if Exception any } catch(Exception ea) { MessageBox.Show("Rollback Exception"+ea.Message); } } cn.Close(); } public void batchprocess2() { try { var lqty = float.Parse(textBox14.Text); var ti = float.Parse(textBox31.Text); var tw = float.Parse(textBox29.Text); var fti = ti - lqty; var ftw = tw + lqty; MySqlCommand opp = new MySqlCommand("update batch_process set tem_in=@ti,tem_wait=@tw where batch_no=@nbno", cn); opp.Parameters.AddWithValue("@nbno", comboBox3.SelectedItem.ToString()); opp.Parameters.AddWithValue("@ti", fti); opp.Parameters.AddWithValue("@tw", ftw); opp.ExecuteNonQuery(); } catch (Exception eli) { MessageBox.Show("Can't update batch" + eli); } }
Когда возникает исключение, транзакция откатывается от того места, где она была начата, к тому месту, где она была зафиксирована.
Но я создал один метод между этой транзакцией, и я хочу включить этот метод транзакции в основную транзакцию.
я хочу откатить и зафиксировать все транзакции между
BeginTransaction()и
Commit()
Но я не могу перефразировать объект MySqlTransaction, как я могу это сделать?
Что я уже пробовал:
Просто я пытаюсь использовать объект MysqlTransaction путем рефренса в свой метод с именем "batchprocess2".
Я хочу включить все запросы в основную транзакцию.
Как это возможно или нет?