我想插入记录到sql server 2008表中,使用c#asp.net,列值都被声明为“nvarchar”,并且第一列subid是主键。在我的代码中,我检索最后一个coulmn 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();
如何使价值得到插在最后一行,请帮助。 我的subid具有类似“IT10001”,“EC10001”的值,以便根据前两个字母识别部门,这就是为什么我要使用varchar!
这种方法是一个非常可怕的设计 - 您不应该使用“SELECT MAX(..)+ 1”方法来创建新的ID值。这是**不安全**负载下 - 如果多个用户使用此应用程序,而不是稍后您会有重复。 **不要这样做!**在表中使用'INT IDENTITY'列,让SQL Server为您处理ID的唯一性。 –
@marc_s出于兴趣,你每天需要告诉人们多少次? ;-) – Bridge
@Bridge:**方式太多次了!** :-( –