Вставьте строки в несколько таблиц в SQL Server 2008 со страницы asp.net - PullRequest
0 голосов
/ 21 февраля 2012

У меня проблема с вставкой данных в несколько таблиц из моего приложения asp.net.

Я просто хочу вставить строки в три таблицы, но если по какой-либо причине вставка не удалась, ее необходимо удалить из всех трех таблиц, т. Е. Я хочу, чтобы она была атомарной, поскольку либо записи вставлены во все три таблицы, либо нет ни одной.

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

Я не понимаю, где я не прав или что еще я должен сделать, чтобы добиться этого.

Ждем ваших добрых решений.

Спасибо в Adv Supriya

1 Ответ

0 голосов
/ 19 апреля 2016

ЭТОТ КОДЕКС ДЛЯ СОХРАНЕНИЯ ОДНОГО ЗАПИСИ В ОДНОЙ ТАБЛИЦЕ И ДЕТАЛИ ОТ СЕТКИ СОХРАНЕНИЯ В ДЕТАЛЬНУЮ ТАБЛИЦУ

public int FN_InserMultpleinsecondtable(ENT_firsttablevalue entDCn,List<ENT_scndtablevalue> LstEnt)
    {
        long DataResult = 0; long HistResult = 0;
        SqlCommand cmd = new SqlCommand();
        using (SqlConnection cn = new SqlConnection(classname.ConnectionString))
        {
            cn.Open();
            SqlTransaction trans;
            trans = cn.BeginTransaction();
            try
            {
                cmd = new SqlCommand("[StoredProcedurefor1st-table]", cn, trans);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@id", SqlDbType.Int).Value = entDCn.colMas_id_DM;

            DataResult = Convert.ToInt64(1);

            if (DataResult > 0)
            {
                foreach (ENT_scndtablevalue entLoc in LstEnt)
                {

                    cmd = new SqlCommand("storedprocedurefor2nd table multiple insert", cn, trans);
                    cmd.CommandType = CommandType.StoredProcedure;
                                                cmd.Parameters.Add("@_Name", SqlDbType.VarChar, 50).Value = entLoc.Name;
                    cmd.Parameters.Add("@MobNo", SqlDbType.Int).Value = entLoc.Mobno;
                                                HistResult = Convert.ToInt64(cmd.ExecuteScalar());


                }
            }


            if (HistResult > 0)
            {
                trans.Commit();
                return Convert.ToInt32(DataResult);
            }
            else
            {
                trans.Rollback();
                return -1;
            }

        }
        catch (Exception ex)
        {
            string msg = ex.Message;
            trans.Rollback();
            trans.Dispose();
            return 0;
        }
    }


}

в имени класса ENT_firsttablevalue и ENT_scndtablevalue объявляют переменные, подобные этой

public int Name { получить; задавать; } * +1010 *

Мне нравится и код сохранения в кнопке

этот код находится внутри команды сохранения кнопки

ENT_firsttablevalue EntDObj = new ENT_firsttablevalue ();
EntDObj.colMas_id_DM = Convert.ToInt32(ID);
List<ENT_scndtablevalue> LstDEnt = new List<ENT_scndtablevalue>();
{
  for (int i = 0; i < GridView.Rows.Count; i++)
  {
    LstDEnt.Add(new ENT_scndtablevalue
    {
      Name= (GridView.Rows[i].Cells[0].Text).ToString(),
      Mob= (GridView.Rows[i].Cells[1].Text).ToString(),
    });
  }
  long resu = dalDobj.FN_InserMultpleinsecondtable(EntDObj, LstDEnt);
...