Hardevsinh Mori Ответов: 2

Это похоже на sqltransaction


SqlConnection cn;
SqlTransaction st;
st=cn.BeginTransaction;



В/с

SqlConnection cn;
SqlTransaction st=новая SqlTransaction();


Похоже ли это?

Что я уже пробовал:

Я искал в гугле, но не понял и запутался.

private void btbsend_Click(object sender, EventArgs e)
        {
                MySqlCommand genvoucher,df;
                MySqlTransaction genvouchrt=new MySqlTransaction();
                MySqlTransaction dft = new MySqlTransaction();
                try
                {
                    cn.Open();

                    string fvno;
                    dateTimePicker1.Value = DateTime.Now;
                    dateTimePicker2.Value = DateTime.Now;
                    var tdat = dateTimePicker2.Value;
                    var ttime = dateTimePicker1.Value;
                    fvno = textBox1.Text;
                    genvoucher = new MySqlCommand("insert into cutting(vno,bno,nsize,machine,vdate,operator,stime,shift,status) values(@vno,@bno,@size,@machine,@date,@opt,@start,@shift,@status)", cn, genvouchrt);
                    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("@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();
                    genvouchrt.Commit();

                    df = new MySqlCommand("insert into vouchers values(@vno,@dept,@shift,@task,@stats,@remarkn,@remarkv)", cn, dft);
                    df.Parameters.AddWithValue("@vno", textBox1.Text);
                    df.Parameters.AddWithValue("@dept", dept);
                    df.Parameters.AddWithValue("@shift", shift);
                    df.Parameters.AddWithValue("@task", "Cutting");
                    df.Parameters.AddWithValue("@stats", "Open");
                    df.Parameters.AddWithValue("@remarkn", "");
                    df.Parameters.AddWithValue("@remarkv", "");
                    df.ExecuteNonQuery();
                    dft.Commit();

                    MessageBox.Show("Voucher Opened Successfully!");
                    cn.Close();

                    this.Close();
                }
            catch (Exception eli)
            {
                MessageBox.Show("Can't Generate Voucher" + Environment.NewLine + eli);
                try
                {
                    genvouchrt.Rollback();
                    dft.Rollback();
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Rollback Exception"+ex.Message);
                }
            }
        }

Graeme_Grant

Какой у вас вопрос? Будьте конкретны: это то, что я сейчас делаю; это код, который я использую; это ошибка, с которой я столкнулся; и т. д...

[no name]

мой вопрос в том, если я использую вторую часть, это неправильно?

Graeme_Grant

Эта информация должна быть в вашем вопросе. Вот почему это называется "вопросом".

Кроме того, нажмите "ответить" на комментарий, на который вы хотите "ответить", а не "задать вопрос или комментарий". Таким образом, автор будет знать, что вы общаетесь с ними. Вы уже задали более 15 вопросов, так что вы уже должны это знать.

[no name]

я обновил свой вопрос и добавил код.

Graeme_Grant

см. ответ ниже.

Graeme_Grant

Согласно документации, вы открываете соединение, начинаете транзакцию, выполняете какую - то работу, фиксируете транзакцию или откатываете ее-вот и все в двух словах. Для получения дополнительной информации ознакомьтесь с документацией.

2 Ответов

Рейтинг:
17

Graeme_Grant

Непонятно, чего вы хотите. поиск Google быть вашим другом. Итак, вот несколько ссылок на документацию, найденных с помощью поиск Google, которые также включают примеры кода:
* Класс SqlTransaction (System. Data.SqlClient)[^]
* Сделки и операции массового копирования | Майкрософт документы[^]

Вот учебник, найденный прямо здесь, на CodeProject:
* Учебник для начинающих для понимания транзакций и TransactionScope в ADO.NET[^]

И поиск Google для получения дополнительных учебных пособий: SqlTransaction начинающих примеры с#[^]


Wendelius

Хорошие ссылки!

Рейтинг:
12

Wendelius

Вы спросили, похожи ли следующие вещи:

SqlConnection cn;
SqlTransaction st;
st=cn.BeginTransaction;

В/с
SqlConnection cn;
SqlTransaction st=new SqlTransaction();

Однако этот вопрос не совсем имеет смысл, поскольку последний не компилируется. Другими словами, вы не можете создать экземпляр SqlTransaction класс напрямую. Это происходит потому, что конструктор определяется как internal.

Если вы попытаетесь скомпилировать последний код, то получите ошибку
Severity Code   Description
-------- ------ ----------------------------------------------------------------------
Error    CS1729 'SqlTransaction' does not contain a constructor that takes 0 arguments	

Вероятно, причина в предотвращении прямого создания экземпляра SqlTransaction класс это что во время BeginTransaction звоните, проводится несколько проверок и делаются назначения, например:
- уровень изоляции по умолчанию установлен на read committed, если он не указан
- соединение проверено
- соединение восстанавливается при необходимости и разрывается
- и так далее...


Graeme_Grant

Код был добавлен после того, как я опубликовал свое решение. Хорошо сделано для ответа на проблему кодирования. 5 б :)

[no name]

действительно достойный ответ.

Wendelius

Спасибо.

Wendelius

Спасибо