C# asp.net を使用して、SQL Server 2008 テーブルにレコードを挿入したいのですが、列の値はすべて「nvarchar」として宣言されており、最初の列のサブ ID は主キーです。私のコードでは、最後の列 ID を取得します。それをインクリメントして新しいレコードのサブIDとして使用します。レコードを挿入すると、順番に保存されず、代わりに途中に保存されます。次回は最後のID列の値を取得しようとします(私は"order by" を使用すると、既存の値が得られますが、これをインクリメントすると、"値が重複しています。許可されていません" というエラーが発生します。これは、最後の id 値を取得してインクリメントするための私のコードです。
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();
私の挿入コードは次のとおりです。
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();
値を最後の行として挿入するにはどうすればよいですか。私のサブ ID には、「IT10001」、「EC10001」などの値があり、最初の 2 文字に基づいて部門を識別します。そのため、varchar を使用しています。