powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Ошибка. Не завершается транзакция
19 сообщений из 19, страница 1 из 1
Ошибка. Не завершается транзакция
    #35367498
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код:
Код: plaintext
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.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
public static Int32 AddAbiturient(string connStr, string surname, string name, string lastname, bool sex, bool militaryService,
            string passport, Int32 nationality, DateTime birthDate, DateTime passportGiveDate, string passportGiven, string birthPlace,
            string address, string educInstitution, DateTime educEndDate, string educDocSerial, bool medal, Int32 foreignLang,
            bool cources, bool educationDoc, bool highEducFirst, byte educForm, bool statement, bool photo, bool passportCopy,
            bool Y086, DateTime statementDate, bool militaryDoc, bool needConduct, bool artAlbum, bool recrutmentTarget,
            string extInfo)
        {
            Int32 identity = - 1 ;

            SqlConnection cn = new SqlConnection(connStr);

            try
            {
                cn.Open();
                SqlCommand cmd_add = new SqlCommand("AddAbiturient", cn);
                cmd_add.CommandType = CommandType.StoredProcedure;

                cmd_add.Parameters.Add("@surname", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@name", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@lastname", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@sex", SqlDbType.Bit);
                cmd_add.Parameters.Add("@militaryService", SqlDbType.Bit);
                cmd_add.Parameters.Add("@passport", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@nationality", SqlDbType.Int);
                cmd_add.Parameters.Add("@birthdate", SqlDbType.DateTime);
                cmd_add.Parameters.Add("@passportGiveDate", SqlDbType.DateTime);
                cmd_add.Parameters.Add("@passportGiven", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@birthPlace", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@address", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@educInstitution", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@educEndDate", SqlDbType.DateTime);
                cmd_add.Parameters.Add("@educDocSerial", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@medal", SqlDbType.Bit);
                cmd_add.Parameters.Add("@foreignLang", SqlDbType.Int);
                cmd_add.Parameters.Add("@cources", SqlDbType.Bit);
                cmd_add.Parameters.Add("@educationDoc", SqlDbType.Bit);
                cmd_add.Parameters.Add("@highEducFirst", SqlDbType.Bit);
                cmd_add.Parameters.Add("@educForm", SqlDbType.TinyInt);
                cmd_add.Parameters.Add("@statement", SqlDbType.Bit);
                cmd_add.Parameters.Add("@photo", SqlDbType.Bit);
                cmd_add.Parameters.Add("@passportCopy", SqlDbType.Bit);
                cmd_add.Parameters.Add("@086Y", SqlDbType.Bit);
                cmd_add.Parameters.Add("@statementDate", SqlDbType.DateTime);
                cmd_add.Parameters.Add("@militaryDoc", SqlDbType.Bit);
                cmd_add.Parameters.Add("@needConduct", SqlDbType.Bit);
                cmd_add.Parameters.Add("@artAlbum", SqlDbType.Bit);
                cmd_add.Parameters.Add("@recrutmentTarget", SqlDbType.Bit);
                cmd_add.Parameters.Add("@extInfo", SqlDbType.NVarChar);
                cmd_add.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;

                cmd_add.Parameters["@surname"].Value = surname;
                cmd_add.Parameters["@name"].Value = name;
                cmd_add.Parameters["@lastname"].Value = lastname;
                cmd_add.Parameters["@sex"].Value = sex;
                cmd_add.Parameters["@militaryService"].Value = militaryService;
                cmd_add.Parameters["@passport"].Value = passport;
                cmd_add.Parameters["@nationality"].Value = nationality;
                cmd_add.Parameters["@birthdate"].Value = birthDate;
                cmd_add.Parameters["@passportGiveDate"].Value = passportGiveDate;
                cmd_add.Parameters["@passportGiven"].Value = passportGiven;
                cmd_add.Parameters["@birthPlace"].Value = birthPlace;
                cmd_add.Parameters["@address"].Value = address;
                cmd_add.Parameters["@educInstitution"].Value = educInstitution;
                cmd_add.Parameters["@educEndDate"].Value = educEndDate;
                cmd_add.Parameters["@educDocSerial"].Value = educDocSerial;
                cmd_add.Parameters["@medal"].Value = medal;
                cmd_add.Parameters["@foreignLang"].Value = foreignLang;
                cmd_add.Parameters["@cources"].Value = cources;
                cmd_add.Parameters["@educationDoc"].Value = educationDoc;
                cmd_add.Parameters["@highEducFirst"].Value = highEducFirst;
                cmd_add.Parameters["@educForm"].Value = educForm;
                cmd_add.Parameters["@statement"].Value = statement;
                cmd_add.Parameters["@photo"].Value = photo;
                cmd_add.Parameters["@passportCopy"].Value = passportCopy;
                cmd_add.Parameters["@086Y"].Value = Y086;
                cmd_add.Parameters["@statementDate"].Value = statementDate;
                cmd_add.Parameters["@militaryDoc"].Value = militaryDoc;
                cmd_add.Parameters["@needConduct"].Value = needConduct;
                cmd_add.Parameters["@artAlbum"].Value = artAlbum;
                cmd_add.Parameters["@recrutmentTarget"].Value = recrutmentTarget;
                cmd_add.Parameters["@extInfo"].Value = extInfo;

                cmd_add.ExecuteNonQuery();
                identity = (int)cmd_add.Parameters["@RETURN_VALUE"].Value;
                cn.Close();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Произошла ошибка:\npublic static Int32 AddAbiturient(...)\n" + exc.Message);
            }
            finally
            {
                try
                {
                    cn.Close();
                }
                catch { }
            }

            InsertPrioritets(connStr, identity, dict);
            MakeExamsList(connStr, identity);

            return identity;
        }

        public static void InsertPrioritets(string connStr, Int32 recid, Dictionary<byte, Int32> dict)
        {
            SqlConnection cn = new SqlConnection(connStr);
            string query = "INSERT INTO ABITURIENT_SPECIALITY(ABITSPECS_ABITID, ABITSPECS_SPECID, ABITSPECS_PRIORITY)";
            query += " VALUES(@abitID, @specID, @prior)";
            SqlCommand cmd_add = new SqlCommand(query, cn);
            cmd_add.CommandType = CommandType.Text;
            cmd_add.Parameters.Add("@abitID", SqlDbType.Int);
            cmd_add.Parameters.Add("@specID", SqlDbType.Int);
            cmd_add.Parameters.Add("@prior", SqlDbType.TinyInt);

            try
            {
                cn.Open();

                foreach (byte key in dict.Keys)
                {
                    cmd_add.Parameters["@abitID"].Value = recid;
                    cmd_add.Parameters["@specID"].Value = dict[key];
                    cmd_add.Parameters["@prior"].Value = key;

                    cmd_add.ExecuteNonQuery();
                }
            }
            catch (Exception exc)
            {
                MessageBox.Show("Произошла ошибка создания приоритетов:\npublic static void InsertPrioritets(...)\n" + exc.Message);
            }
            finally
            {
                try
                {
                    cn.Close();
                }
                catch { }
            }
        }

        public static void MakeExamsList(string connStr, Int32 recid)
        {
            SqlConnection cn = new SqlConnection(connStr);
            SqlCommand cmd_add = new SqlCommand("MakeExamsList", cn);
            cmd_add.CommandType = CommandType.StoredProcedure;
            cmd_add.Parameters.Add("@abitID", SqlDbType.Int);

            try
            {
                cn.Open();
                cmd_add.Parameters["@abitID"].Value = recid;
                cmd_add.ExecuteNonQuery();
            }
            catch (Exception exc)
            {
                MessageBox.Show("Произошла ошибка создания приоритетов:\npublic static void MakeExamsList(...)\n" + exc.Message);
            }
            finally
            {
                try
                {
                    cn.Close();
                }
                catch { }
            }
        }

При вызове в функции AddAbiturient функции InsertPrioritets(connStr, identity, dict); программа вываливается на исключении "ошибка внешнего ключа", где внешний ключ - это identity. Почему после закрытия соединения транзакция не коммитится? Пробовал коммитить вручную - та же ситуация. Есть подозрение, что это из-за того, что методы класса - статические...
Или VS чего-то там оптимизирует...

Но все же, что делать?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367551
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кто то увидел в этом коде начало транзакции? :)
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367562
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так она должна автоматом завершаться после закрытия соединения.
Или я неправ?

P.S. И кстати, транзакцию вручную я тоже создавал и коммитил. Результат аналогичный...

Единственное что меня смущает - это то, что в отладчике при открытии соединения в функции InsertPrioritets(...) в AddAbiturient(...)[где я уже закрыл соединение] отладчик показывает, что соединение открыто
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367591
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
товарисч, ты не понял, тебе говорят что слово Transaction в твоем коде вообще отсутствует, о чем речь? у тебя вообще ошибка не об этом, понимать-то что читаешь умеем? ошибка ключа - это ошибка ключа, дубликат суешь вероятно. А соединение уходит в пул, поэтому и не закрывается
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367597
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
п.с. апдейт: "внешний ключ", это, я как понимаю, вероятней всего foreign key, а значит ты суешь запись, которая неверно ссылается на другую таблицу
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367613
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SMAKSx86
P.S. И кстати, транзакцию вручную я тоже создавал и коммитил. Результат аналогичный...

Так и писал SqlTransaction trans = cn.BeginTransaction();
а после выполнения коммитил
trans.Commit();

Читать я умею.
А вот за инфу о пуле - спасибо. Не знал. Щас буду самообразованием заниматься.

P.S. "Не надо так с нами разговаривать" (c) где-то на форуме
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367622
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
snack ты чето ваще на другой волне :) пора книжки читать...
либо изъясняйся ,так чтобы тебя понимали:)
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367626
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зып.с. апдейт: "внешний ключ", это, я как понимаю, вероятней всего foreign key, а значит ты суешь запись, которая неверно ссылается на другую таблицу

Аха :-)
Вот я сначала добавляю инфу о абитуриенте, получаю его id из identity. Закрываю соединение.
Потом открываю новое и делаю вставку специальностей в соответствии с приоритетом. В таблице foreign key из таблицы с абитуриентами. Так вот после закрытия соединения и при открытии нового в другой функции в таблице с абитуриентами записи по какой-то причине еще нет. Потому и ругается...
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367631
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТак вот после закрытия соединения и при открытии нового в другой функции в таблице с абитуриентами записи по какой-то причине еще нет.
ты можешь этот относительный путь,преобразовать в абсолютный,а то не очень ясно,я потерялся ...
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367649
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да мне писать очень долго :-) Прошу прощения...

Я сейчас тему пула соединений разбираю. Вот если ничего не получится - я еще напишу ;-)
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367659
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SMAKSx86 зып.с. апдейт: "внешний ключ", это, я как понимаю, вероятней всего foreign key, а значит ты суешь запись, которая неверно ссылается на другую таблицу

Аха :-)
Вот я сначала добавляю инфу о абитуриенте, получаю его id из identity. Закрываю соединение.
Потом открываю новое и делаю вставку специальностей в соответствии с приоритетом. В таблице foreign key из таблицы с абитуриентами. Так вот после закрытия соединения и при открытии нового в другой функции в таблице с абитуриентами записи по какой-то причине еще нет. Потому и ругается...

делайте всё это в одной транзакции... или у вас однопользовательское приложение?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367703
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала
Есть таблица с абитуриентами. Есть таблица со списком специальностей, на которые абитуриент хотел бы поступить.
Часть схемы в аттаче...
1) Вставляется новая запись с инфой об абитуриенте(ABITURIENTS)
2) получаем id этой записи
3) вставляем в таблицу со специальностями(ABITURIENT_SPECIALITY) записи типа
|ID_абитуриента|КОД_СПЕЦИАЛЬНОСТИ|ПРИОРИТЕТ|

Дело в том, что после закрытия соединения в функции AddAbiturient, и открытия нового соединения в функции InsertPrioritets запись с ID, которую только что вставили в таблице ABITURIENTS еще не существует. Поэтому InsertPrioritets не может выполнить вставку.

Что нужно сделать, чтобы при вызове InsertPrioritets новая запись уже существовала бы в таблице?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367707
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SMAKSx86Есть код:
У тебя есть все шансы стать вторым vbnet2000 . Пальцы не отсохли всю эту ерунду писать?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367732
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч SMAKSx86Есть код:
У тебя есть все шансы стать вторым vbnet2000 . Пальцы не отсохли всю эту ерунду писать?

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

И вот еще вопрос - а что тут криминального?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367746
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser
Кажется, осознал ошибку. Сейчас буду переделывать. Спасибо...
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367822
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SMAKSx86А вот обо...рать кого-нить - это обязательно? План выполняете?
Никого не об..рал.
SMAKSx86
Не хотите отвечать по существу вопроса - не отвечайте, проходите мимо. А то уже две строки написали. Не лень было?...
По существу вопроса уже другие ответили. И не лениво, нет.
SMAKSx86
И вот еще вопрос - а что тут криминального?
Вот скажите. Неужели после написания уже трех строк, подобных
Код: plaintext
1.
2.
3.
cmd_add.Parameters.Add("@surname", SqlDbType.NVarChar);
cmd_add.Parameters.Add("@name", SqlDbType.NVarChar);
cmd_add.Parameters.Add("@lastname", SqlDbType.NVarChar);
у вас не возникло сомнений в правильности того, что вы делаете?
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367875
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, покажите другой способ. Не могу понять, что тут неправильного.
И чем это плохо? Я, в общем, много не знаю...
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367927
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SMAKSx86Пожалуйста, покажите другой способ. Не могу понять, что тут неправильного.
И чем это плохо? Я, в общем, много не знаю...
Если посмотреть сюда , то твой код превращается в:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public abstract class AbiturientAccessor : DataAccessor<Abiturient>
{
    [SprocName("AddAbiturient")]
    public abstract Int32 AddAbiturient(string connStr, string surname, string name, string lastname, bool sex, bool militaryService,
            string passport, Int32 nationality, DateTime birthDate, DateTime passportGiveDate, string passportGiven, string birthPlace,
            string address, string educInstitution, DateTime educEndDate, string educDocSerial, bool medal, Int32 foreignLang,
            bool cources, bool educationDoc, bool highEducFirst, byte educForm, bool statement, bool photo, bool passportCopy,
            bool Y086, DateTime statementDate, bool militaryDoc, bool needConduct, bool artAlbum, bool recrutmentTarget,
            string extInfo);
}
Вот, в общем-то, и всё. Сравни со своей сотней строк.
...
Рейтинг: 0 / 0
Ошибка. Не завершается транзакция
    #35367968
SMAKSx86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Красиво. Буду знать теперь. Благодарю.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Ошибка. Не завершается транзакция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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