"Select Max (ID) ...."쿼리로 신청자 등록 ID가 생성되는 신청자 등록 양식을 만듭니다. 이 쿼리가 데이터베이스에서 MaxID를 가져 오면이 ID를 +1 (+1)하여이 ID를 증가시킵니다. 이렇게하면 자신을 등록한 모든 신청자의 등록 ID가 생성됩니다. 그러나 하나의 문제가 서버 및 여러 클라이언트 (약 10)에서 프로젝트를 실행할 때 발생합니다. 신청자가 "기본 키 위반 예외"가 발생하면 등록을 시도합니다. 5 삽입 쿼리가 최대 쿼리 후 하나씩 실행이됩니다데이터베이스에서 고유 한 최대 ID를 생성하는 방법
을 실행코드가
public long getUid()
{
try
{
string qry = "select isnull(max(Temp_Applicant_RegNo),0) as appregno FROM Temp_Reg";
if (cs.State == ConnectionState.Closed)
{
cs.Open();
}
cmd = new SqlCommand(qry, cs);
dr = cmd.ExecuteReader();
long cid = 0;
if (dr.Read())
{
cid = long.Parse(dr["appregno"].ToString());
cid++;
}
if (cs.State == ConnectionState.Open)
{
cs.Close();
}
return cid;
}
catch (Exception ex)
{
lbl_ErrorMsg.Text = ex.Message;
return 0;
}
}
protected void Save_btn_Click(object sender, EventArgs e)
{
SqlTransaction trn = null;
try
{
long Regid = getUid();
con.Open();
trn = con.BeginTransaction();
cmd = new SqlCommand("insert into....", con, trn);
cmd.Parameters.AddWithValue("@RegNo", Regid);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("insert into....", con, trn);
cmd.Parameters.AddWithValue("@RegNo", Regid);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("insert into....", con, trn);
cmd.Parameters.AddWithValue("@RegNo", Regid);
cmd.ExecuteNonQuery();
trn.Commit();
}
catch (Exception ex)
{
lbl_ErrorMsg.Text = ex.Message;
trn.Rollback();
}
}
아래와 같습니다 아무런이되도록 어떻게 신청자에 대한 최대 ID를 생성 할 수 없음을 나에게 제안을주십시오 모든 복제 기회. 왜냐하면 나는 라이브 프로젝트에서 일하고 있기 때문이다.
거기에 대해 내가 그렇게하지 마십시오 Asp.net C#을
MAX (ID)를 선택한 다음 증가시키지 마십시오. 기본 키에 IDENTITY를 사용하면 데이터베이스에서 키를 생성합니다. – David
또 다른 옵션은 SQL Server 2012/2014를 사용하는 경우 SEQUENCE를 사용하는 것입니다. –
또는 GUID를 사용하십시오. – Arman