Как я могу использовать транзакцию в одиночной функции для нескольких запросов на вставку и обновление? например:Применение транзакции по нескольким SQL-запросам
private void button1_Click(object sender, EventArgs e)
{
// transaction
SqlConnection objConnection = new SqlConnection(annual_examination_system.Properties.Settings.Default.connString);
SqlTransaction objTransaction = null;
int count = 0;
try
{
objConnection.Open();
objTransaction = objConnection.BeginTransaction();
string q1 = "update query"
SqlCommand objCommand1 = new SqlCommand(q1, objConnection, objTransaction);
objCommand1.ExecuteNonQuery();
objTransaction.Commit();
string q2 = "insert query"
SqlCommand objCommand1 = new SqlCommand(q2, objConnection, objTransaction);
objCommand1.ExecuteNonQuery();
objTransaction.Commit();
}
catch (Exception ex)
{
objTransaction.Rollback();
MessageBox.Show(ex.Message);
MessageBox.Show("Exception, Row :" + count);
MessageBox.Show("Transaction Rollback.");
}
finally
{
// Close the connection.
if (objConnection.State == ConnectionState.Open)
{
objConnection.Close();
}
}
теперь есть два запроса для обновления и один для вставки. так что я должен применять транзакцию отдельно от них или одна транзакция может быть применена к обоим?
Если вам нужно как «обновление», так и «вставить» для выполнения или откат в качестве отдельной транзакции, используйте только «commit» после последнего «ExecuteNonQuery». – Serg
Я пробовал это, но он дает ошибку: время ожидания истекло. –