C# asp.net을 사용하여 레코드를 SQL Server 2008 테이블에 삽입하려고합니다. 열 값은 모두 "nvarchar"로 선언되고 첫 번째 열 subid는 기본 키입니다. 내 코드에서 , 나는 마지막 coulmn ID를 검색하고 증분하여 새 레코드에 대한 subid로 사용합니다. 레코드를 삽입하면 순차적으로 저장되지 않고 중간 어딘가에 저장됩니다. 다음에 검색하려고 할 때 마지막 id 열 값 ("order by"을 사용하더라도)은 증가 할 때 "중복 값, 허용되지 않음"오류를 제공하는 기존 값을 제공합니다.특정 행 다음에 레코드 삽입
SqlCommand myCommand = new SqlCommand("SELECT TOP 1 subid FROM subjects
ORDER BY subid DESC", con1);
reader = myCommand.ExecuteReader();
if (reader.HasRows == false)
{
Label4.Text = "1";
reader.Close();
}
else
{
while (reader.Read()) // if can read row from database
{
id = reader[0].ToString();
}
int n = Convert.ToInt32(id);
int j = n + 1;
Label4.Text = j.ToString();
내 삽입 코드는 다음과 같습니다 : 이 마지막 ID 값을 검색하고 증가하는 내 코드 내가 값을 어떻게
SqlDataAdapter da = new SqlDataAdapter("SELECT TOP 1 * FROM subjects ORDER BY
subid DESC", con);
SqlCommandBuilder cb = new SqlCommandBuilder(da);
DataSet ds = new DataSet("subjects");
da.Fill(ds, "subjects");
DataRow row = ds.Tables["subjects"].NewRow();
row["subid"] = Label4.Text;
row["dept"] = (string)Session["deptmnt"];
row["yr"] = DropDownList2.SelectedValue;
row["sem"] = DropDownList3.SelectedValue;
row["subname"] = TextBox1.Text;
row["subcode"] = TextBox2.Text;
ds.Tables["subjects"].Rows.Add(row);
da.Update(ds, "subjects");
Label10.Visible = true;
con.Close();
마지막 행으로 삽입 얻을, pls는 도움이됩니다. 내 subid에는 "IT10001", "EC10001"과 같은 값이 있는데, 첫 번째 두 글자를 기반으로 부서를 식별합니다. 왜 내가 varchar!
이 접근법은 정말 끔찍한 디자인입니다. 새로운 ID 값을 만들 때 "SELECT MAX (..) + 1"방식을 사용하지 마십시오. **로드 중 ** 안전하지 않음 ** - 한 명 이상의 사용자가이 애플리케이션을 사용하고 있다면 나중에 복제본을 작성하는 것보다 훨씬 빠릅니다. ** 그렇게하지 마세요! ** 테이블에 'INT IDENTITY' 컬럼을 사용하고 SQL Server가 ID의 고유성을 처리하도록하십시오. –
@marc_s 관심 없으니 하루에 몇 번이나 사람들에게 말해야합니까? ;-) – Bridge
@ 브릿지 : ** 길 너무 많아요! ** :-( –