powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Появление дубликатов в базе
10 сообщений из 10, страница 1 из 1
Появление дубликатов в базе
    #32848597
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу понять, откуда берутся дубликаты записей в БД: при создании новых записей insert они иногда дублируются, причём ошибки в самой программе, которая делает всатвку записей нет. Дубль записи появляется в течеие одной-нескольких секунд после оригинала и причём не всегда. Не могу отловить этот момент - когда? И как это побороть?
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32848620
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите скрипт который вставляет запись
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32848675
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор //Saving
strStat = Request.QueryString["stat"].ToString();
if (strStat == "new")
{
try
{
SqlCommand sqlCmd = new SqlCommand();
DateTime dtDatumsNo = new DateTime();
DateTime dtDatumsLi = new DateTime();
DateTime dtIzdosDatums = new DateTime();
CultureInfo inf = new CultureInfo("lv-LV", true);
sqlCmd.Connection = sqlCnn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "_pusPA_addPolicyStandartOCTA";

sqlCmd.Parameters.Add("@Strukt_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@ApdrVeids_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@Numurs", SqlDbType.Int);
sqlCmd.Parameters.Add("@Serija_ID", SqlDbType.VarChar, 2);
sqlCmd.Parameters.Add("@Status_ID", SqlDbType.TinyInt);
sqlCmd.Parameters.Add("@Agent_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@IpasnieksID", SqlDbType.Int);
sqlCmd.Parameters.Add("@IpasnieksAdreseID", SqlDbType.Int);
sqlCmd.Parameters.Add("@TuretaisID", SqlDbType.Int);
sqlCmd.Parameters.Add("@TuretaisAdreseID", SqlDbType.Int);
sqlCmd.Parameters.Add("@ApdrNemNosauk", SqlDbType.VarChar, 64);
sqlCmd.Parameters.Add("@ApdrNemKods", SqlDbType.VarChar, 16);
sqlCmd.Parameters.Add("@Auto_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@IzdosDatums", SqlDbType.DateTime);
sqlCmd.Parameters.Add("@adv_id", SqlDbType.Int);
sqlCmd.Parameters.Add("@DatumsNo", SqlDbType.DateTime);
sqlCmd.Parameters.Add("@DatumsLi", SqlDbType.DateTime);
sqlCmd.Parameters.Add("@DatumaLaiksNo", SqlDbType.VarChar, 5);
sqlCmd.Parameters.Add("@Periods_ID", SqlDbType.SmallInt);
sqlCmd.Parameters.Add("@AtlaideID", SqlDbType.VarChar, 4);
sqlCmd.Parameters.Add("@KorpAtlaideID", SqlDbType.VarChar, 4);
sqlCmd.Parameters.Add("@PersonAtlaide", SqlDbType.Decimal, 9);
sqlCmd.Parameters.Add("@PiemaksaID", SqlDbType.VarChar, 4);
sqlCmd.Parameters.Add("@BonusMalusID", SqlDbType.Int);
sqlCmd.Parameters.Add("@ApdrPremija", SqlDbType.Decimal, 9);
sqlCmd.Parameters.Add("@ApdrPremijaReal", SqlDbType.Decimal, 9);
sqlCmd.Parameters.Add("@IpasieNosac", SqlDbType.VarChar, 1024);
sqlCmd.Parameters.Add("@Lietotajs", SqlDbType.VarChar, 16);
sqlCmd.Parameters.Add("@AgentsOld_ID", SqlDbType.VarChar, 16);
sqlCmd.Parameters.Add("@AgentsOldNosauk", SqlDbType.VarChar, 64);
sqlCmd.Parameters.Add("@Auto_Tips", SqlDbType.VarChar, 3);
sqlCmd.Parameters.Add("@Operacija", SqlDbType.SmallInt);
sqlCmd.Parameters.Add("@CsddMsg", SqlDbType.VarChar, 2);
sqlCmd.Parameters.Add("@Polises_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@Message", SqlDbType.Int);

sqlCmd.Parameters["@Strukt_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@ApdrVeids_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Numurs"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Serija_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Status_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Agent_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@IpasnieksID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@IpasnieksAdreseID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@TuretaisID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@TuretaisAdreseID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@ApdrNemNosauk"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@ApdrNemKods"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Auto_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@IzdosDatums"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@adv_id"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@DatumsNo"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@DatumsLi"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@DatumaLaiksNo"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Periods_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@AtlaideID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@KorpAtlaideID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@PersonAtlaide"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@PiemaksaID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@BonusMalusID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@ApdrPremija"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@ApdrPremijaReal"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@IpasieNosac"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Lietotajs"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@AgentsOld_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@AgentsOldNosauk"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Auto_Tips"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Operacija"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@CsddMsg"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Polises_ID"].Direction = ParameterDirection.Output;
sqlCmd.Parameters["@Message"].Direction = ParameterDirection.Output;

sqlCmd.Parameters["@Strukt_ID"].Value = Session["intStrukt_ID"].ToString();
sqlCmd.Parameters["@Lietotajs"].Value = Session["strLietotajs"].ToString();
sqlCmd.Parameters["@ApdrVeids_ID"].Value = 7111;
sqlCmd.Parameters["@Numurs"].Value = txtPolNr.Text.ToUpper();
sqlCmd.Parameters["@Serija_ID"].Value = ddlPolSerija.SelectedValue.ToUpper();
sqlCmd.Parameters["@Status_ID"].Value = 2;
sqlCmd.Parameters["@Agent_ID"].Value = intAgentID;
if (tb1_7.Visible == true)
{
sqlCmd.Parameters["@IpasnieksID"].Value = objIpasniekKlientID;
sqlCmd.Parameters["@IpasnieksAdreseID"].Value = objIpasniekKlientAdreseID;
}
else if (tb1_21.Visible == true)
{
sqlCmd.Parameters["@IpasnieksID"].Value = objIpasniekKlientID;
sqlCmd.Parameters["@IpasnieksAdreseID"].Value = objIpasniekKlientAdreseID;
}
else
{
sqlCmd.Parameters["@IpasnieksID"].Value = DBNull.Value;
sqlCmd.Parameters["@IpasnieksAdreseID"].Value = DBNull.Value;
}
if (tb2_3.Visible == true)
{
sqlCmd.Parameters["@TuretaisID"].Value = objTuretKlientID;
sqlCmd.Parameters["@TuretaisAdreseID"].Value = objTuretKlientAdreseID;
}
else if (tb2_17.Visible == true)
{
sqlCmd.Parameters["@TuretaisID"].Value = objTuretKlientID;
sqlCmd.Parameters["@TuretaisAdreseID"].Value = objTuretKlientAdreseID;
}
else
{
sqlCmd.Parameters["@TuretaisID"].Value = DBNull.Value;
sqlCmd.Parameters["@TuretaisAdreseID"].Value = DBNull.Value;
}
sqlCmd.Parameters["@ApdrNemNosauk"].Value = clsUtils.ReplaceManyToOne(txtFizNemVardsUzvards.Text.ToUpper().Trim(), " ");
sqlCmd.Parameters["@ApdrNemKods"].Value = clsUtils.ReplaceManyToOne(txtFizNemPersKods.Text.ToUpper().Trim(), " ");
sqlCmd.Parameters["@Auto_ID"].Value = txtTransportID.Text;
dtIzdosDatums = Convert.ToDateTime(txtPolIzdosDatums.Text.Substring(6,4) + "." +
txtPolIzdosDatums.Text.Substring(3,2) + "." +
txtPolIzdosDatums.Text.Substring(0,2), inf);
sqlCmd.Parameters["@IzdosDatums"].Value = dtIzdosDatums;
sqlCmd.Parameters["@adv_id"].Value = Session["intPolIzdosVietaID"];
dtDatumsNo = Convert.ToDateTime(txtPolDarbDatumsNo.Text.Substring(6,4) + "." +
txtPolDarbDatumsNo.Text.Substring(3,2) + "." +
txtPolDarbDatumsNo.Text.Substring(0,2), inf);
sqlCmd.Parameters["@DatumsNo"].Value = dtDatumsNo;
dtDatumsLi = Convert.ToDateTime(txtPolDarbDatumsLi.Text.Substring(6,4) + "." +
txtPolDarbDatumsLi.Text.Substring(3,2) + "." +
txtPolDarbDatumsLi.Text.Substring(0,2), inf);
sqlCmd.Parameters["@DatumsLi"].Value = dtDatumsLi;
///!!!!!sqlCmd.Parameters["@DatumaLaiksNo"].Value = GetServerTime();
///sqlCmd.Parameters["@DatumaLaiksNo"].Value = ddlHour.SelectedValue + ":" + ddlMin.SelectedValue;
/*if (Convert.ToInt32(txtHour.Text) == 0)
if (Convert.ToInt32(txtMin.Text) == 0)
txtMin.Text = "01";*/
sqlCmd.Parameters["@DatumaLaiksNo"].Value = txtHour.Text + ":" + txtMin.Text;
sqlCmd.Parameters["@Periods_ID"].Value = ddlPolApdrTermins.SelectedValue;
if (ddlAtlaidesKods.SelectedValue == "1")
sqlCmd.Parameters["@AtlaideID"].Value = "";
else if (ddlAtlaidesKods.SelectedValue == "2")
sqlCmd.Parameters["@AtlaideID"].Value = "I";
else if (ddlAtlaidesKods.SelectedValue == "3")
sqlCmd.Parameters["@AtlaideID"].Value = "L";
if (ddlKorpAtlaide.SelectedValue == "7")
sqlCmd.Parameters["@KorpAtlaideID"].Value = "S";
else if (ddlKorpAtlaide.SelectedValue == "6")
sqlCmd.Parameters["@KorpAtlaideID"].Value = "T";
else if (ddlKorpAtlaide.SelectedValue == "8")
sqlCmd.Parameters["@KorpAtlaideID"].Value = "B";
else
sqlCmd.Parameters["@KorpAtlaideID"].Value = "S";
sqlCmd.Parameters["@PersonAtlaide"].Value = ddlPersonAtlaide.SelectedValue;
sqlCmd.Parameters["@PiemaksaID"].Value = "";
sqlCmd.Parameters["@BonusMalusID"].Value = DBNull.Value;
//sqlCmd.Parameters["@ApdrPremija"].Value = txtPolApdrPremija.Text.Substring(0, txtPolApdrPremija.Text.Length - 3);
//sqlCmd.Parameters["@ApdrPremijaReal"].Value = txtPolApdrPremijaReal.Text.Substring(0, txtPolApdrPremijaReal.Text.Length - 3);
sqlCmd.Parameters["@ApdrPremija"].Value = txtPolApdrPremija.Text;
sqlCmd.Parameters["@ApdrPremijaReal"].Value = txtPolApdrPremijaReal.Text;
sqlCmd.Parameters["@IpasieNosac"].Value = clsUtils.ReplaceManyToOne(txtPolIpasiNosac.Text.ToUpper().Trim(), " ");
sqlCmd.Parameters["@AgentsOld_ID"].Value = txtPolApdrParstavKods.Text;
sqlCmd.Parameters["@AgentsOldNosauk"].Value = txtPolApdrParstavNosauk.Text.ToUpper();
sqlCmd.Parameters["@Operacija"].Value = 1;
sqlCmd.Parameters["@CsddMsg"].Value = txtCsddKods.Text; sqlCmd.Parameters["@Auto_Tips"].Value = clsUtils.AssemblyAutoTips(Convert.ToInt32(ddlTransportVeids.SelectedValue),
Convert.ToInt32(ddlTransportSpecif.SelectedValue), strPerson);

if (sqlCnn.State == ConnectionState.Open)
sqlCnn.Close();

sqlCnn.Open();
try
{
sqlCmd.Prepare();
sqlCmd.ExecuteNonQuery();

intMessage = Convert.ToInt32(sqlCmd.Parameters["@Message"].Value);
if (intMessage == 0)
{
Session["intPolises_ID"] = Convert.ToInt32(sqlCmd.Parameters["@Polises_ID"].Value);
//Save log of save new
SqlConnection sqlCnn_ = new SqlConnection();
sqlCnn_.ConnectionString = WebApp.Class.clsConnect.sqlConnectionString(Session["strLogin"].ToString(),
Session["strPass"].ToString());

SqlCommand sqlCmd_ = new SqlCommand();
sqlCmd_.Connection = sqlCnn_;
sqlCmd_.CommandType = CommandType.StoredProcedure;
sqlCmd_.CommandText = "_pusPA_saveOperLog";

sqlCmd_.Parameters.Add("@Polises_ID", SqlDbType.Int);
sqlCmd_.Parameters.Add("@Lietotajs_ID", SqlDbType.Int);
sqlCmd_.Parameters.Add("@Operacija_ID", SqlDbType.Int);

sqlCmd_.Parameters["@Polises_ID"].Direction = ParameterDirection.Input;
sqlCmd_.Parameters["@Lietotajs_ID"].Direction = ParameterDirection.Input;
sqlCmd_.Parameters["@Operacija_ID"].Direction = ParameterDirection.Input;

sqlCmd_.Parameters["@Polises_ID"].Value = Convert.ToInt32(Session["intPolises_ID"]);
sqlCmd_.Parameters["@Lietotajs_ID"].Value = Convert.ToInt32(Session["intLietotajs_ID"]);
sqlCmd_.Parameters["@Operacija_ID"].Value = 7;

if (sqlCnn_.State == ConnectionState.Open)
sqlCnn_.Close();

sqlCnn_.Open();
try
{
sqlCmd_.Prepare();
sqlCmd_.ExecuteNonQuery();
}
catch (Exception exc)
{
string a = exc.Message;
}
finally
{
sqlCnn_.Close();
}

//Save log of send data ro CSDD
sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlCnn;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "_pusPA_saveOperLog";

sqlCmd.Parameters.Add("@Polises_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@Lietotajs_ID", SqlDbType.Int);
sqlCmd.Parameters.Add("@Operacija_ID", SqlDbType.Int);

sqlCmd.Parameters["@Polises_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Lietotajs_ID"].Direction = ParameterDirection.Input;
sqlCmd.Parameters["@Operacija_ID"].Direction = ParameterDirection.Input;

sqlCmd.Parameters["@Polises_ID"].Value = Convert.ToInt32(Session["intPolises_ID"]);
sqlCmd.Parameters["@Lietotajs_ID"].Value = Convert.ToInt32(Session["intLietotajs_ID"]);
sqlCmd.Parameters["@Operacija_ID"].Value = 13;

if (sqlCnn.State == ConnectionState.Open)
sqlCnn.Close();

sqlCnn.Open();
try
{
sqlCmd.Prepare();
sqlCmd.ExecuteNonQuery();
}
catch (Exception exc)
{
string a = exc.Message;
}
finally
{
sqlCnn.Close();
}
}
else
{
Session["intPolises_ID"] = 0;
}
}
catch (Exception exc)
{
string a = exc.Message;
return 70003;
}
finally
{
sqlCnn.Close();
}
return intMessage;
}
catch (Exception exc)
{
string a = exc.Message;
return 70003;
}
}
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32848907
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Включите sql-профайлер и посмотрите какие sql-команды выполняются на серевере в момент вызова этого кода.
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32849460
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел. Когда я работаю, всё отлично! Если бы всё было так просто... Неужели ни у кого никаких идей? Может быть это может происходить, что иногда у юзера плохой коннект, а все проверки и процедура срабатывают не так быстро, и он успевает несколько раз нажать кнопку сохранения или Refresh?... Теряюсь в догадках. Т.к. это тоже пробовал - вроде то же самое - всё ок...
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32850471
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранимую процедуру вы написали?
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32850497
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я. Меня сейчас больше волнует вопрос: у ASP.NET в каких случаях могут при посте формы на сервер производиться транакзции по нескольку раз, в то время как необходима одна? Думаю, так вопрос корректнее будет звучать.
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32850614
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините дурака, что потревожил. Нашёл я абсолютно детскую ошибку - сам не ожидал...
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32852824
Ыукпун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AchillesИзвините дурака, что потревожил. Нашёл я абсолютно детскую ошибку - сам не ожидал...

Если не трудно - не могли бы Вы объяснить, в чем ошибка? Просто у меня примерно пол-года назад была точно такая же ошибка (при добавлении новых записей иногда возникали "дубликаты"). Я так и не понял тогда, в чем дело. А сейчас увидел Ваше сообщение и заинтересовался - в чем было дело? У меня была какая-то бета версия VS Whidbey, и я грешил именно на то, что это все-таки бета.
...
Рейтинг: 0 / 0
Появление дубликатов в базе
    #32853028
Achilles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Абсолютно собственная ошибка! При проверке клиента в базе на сохранении формы происходит проверка по его коду. Так вот в процедуре длина переменной типа VARCHAR принимаемого параметра была изначально происана заведомо меньше, чем она есть в сущности. Соответственно никогда клиент с таким кодом не находился, так как он просто обрезался. Соответственно и заводились дубликаты.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Появление дубликатов в базе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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