Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выполнить транзакцию или откатить / 4 сообщений из 4, страница 1 из 1
13.12.2013, 09:47
    #38499555
Tanya_0306
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить транзакцию или откатить
Пробую использовать транзакцию. Не могу помять ошибку. Помогите разобраться.
Вот функция
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
  private void  func_update()
    {
        
            SqlConnection conn = new SqlConnection(Form_Export.connect);
            conn.Open();
            SqlCommand myCommand = conn.CreateCommand();
            //Создаем транзакцию   
           // myCommand.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Serializable);
            try
           {
            string index_c = comboBox_Nomenclature.SelectedValue.ToString();
            myCommand.CommandText = @"update  Basises set Basis=@Basis, Nomenclature=@Nomenclature Where Id=" + Id_Basis;
            myCommand.Parameters.Add("@Basis", SqlDbType.VarChar, 25);
            myCommand.Parameters["@Basis"].Value = textBox_basis.Text.Trim();
            myCommand.Parameters.Add("@Nomenclature", SqlDbType.VarChar, 25);
            myCommand.Parameters["@Nomenclature"].Value = index_c;
            myCommand.ExecuteNonQuery();
            myCommand.CommandText = @"delete from [dbo].[Metrics] where  basis=" + Id_Basis;
            myCommand.ExecuteNonQuery();

            myCommand.CommandText = @"Insert into [dbo].[Metrics]  (basis,parameter,value)
                                       values
                                      (@Basis,@Parameter,@Value)";
                  
            myCommand = new SqlCommand(myCommand.CommandText, conn);
            myCommand.Parameters.Add("@Basis", SqlDbType.Int);
            myCommand.Parameters.Add("@Parameter", SqlDbType.VarChar, 25);
            myCommand.Parameters.Add("@Value", SqlDbType.Decimal).Value = DBNull.Value;
            for (int i = 0; i < GridView_Metrics.RowCount; i++)
            {
              {
                    myCommand.Parameters["@Basis"].Value = GridView_Metrics["basis", i].Value.ToString();
                    myCommand.Parameters["@Parameter"].Value = GridView_Metrics["metric", i].Value.ToString();
                    
                   if (GridView_Metrics["value", i].Value.ToString().Length > 0)
                    {  myCommand.Parameters["@Value"].Value = Convert.ToDecimal(GridView_Metrics["value", i].Value.ToString()); }
                    else
                    {  myCommand.Parameters["@Value"].Value = DBNull.Value; }
                
   
                }
              myCommand.ExecuteNonQuery();
          }
        //    myCommand.Transaction.Commit();   
          }
        catch (Exception ex)
        {
            //Отклоняем транзакцию  
         //   myCommand.Transaction.Rollback();
            MessageBox.Show(ex.Message);
        }
        finally
        { conn.Close(); }

      }


Если делать не через транзакцию то код работает. А если открываю строки с транзакцией - то выходит ошибка - "Ссылка на объект не указывает на экземпляр объекта".
...
Рейтинг: 0 / 0
13.12.2013, 10:47
    #38499659
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить транзакцию или откатить
Tanya_0306,
Вот пример. Найдите отличия от своего кода.
...
Рейтинг: 0 / 0
13.12.2013, 13:49
    #38500006
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить транзакцию или откатить
автор Помогите разобраться.
Объект транзакции создан, и ссылка на него сидит в myCommand
Код: c#
1.
myCommand.Transaction = conn.BeginTransaction(System.Data.IsolationLevel.Serializable);


Далее создается новый объект
Код: c#
1.
 myCommand = new SqlCommand(myCommand.CommandText, conn);


т.е. объект "транзакция" благополучно был оприходован сборщиком мусора
Далее:
Код: c#
1.
myCommand.Transaction.Commit(); 

- тут нет транзакции
...
Рейтинг: 0 / 0
13.12.2013, 14:24
    #38500076
igr_ok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выполнить транзакцию или откатить
Tanya_0306,

А в чем смысл этой чудо-функции? Обновить запись, потом удалить ее, потом вставить новую запись?
Причем для вставки новой записи нужно пробежаться в цикле по всем записям грида,чтобы взять последнюю.

Работайте с SQLDataAdapter UpdateCommand,InsertCommand,DeleteCommand и вызывайте SQLDataAdapter.Update. Тогда что-то из вашего кода будет иметь смысл. И, как вам уже советовали, работайте с источником данных, а не с гридом.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выполнить транзакцию или откатить / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]