增加1个ASP.NET

时间:2014-03-01 14:43:11

标签: c# asp.net sql sql-server

我在ASP.NET中遇到了一些问题。我试图在列中获取MAX数,然后将其递增1。 在示例中像这样:

SqlConnection con= new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
con.Open();

string db = "instert into FJ(C1, C2, C3) values (@c1 , @c2 ,@c3)";
SqlCommand com = new SqlCommand(db, con);
com.Parameters.AddWithValue("@c1", TextBox1.Text);
com.Parameters.AddWithValue("@c2", com .CommandText = "declare @a float set @a = (select MAX(C2) from FJ)+1 INSERT INTO [FJ]([C2]) VALUES (@a)");
com.Parameters.AddWithValue("@c3", TextBox3.Text);

com.ExecuteNonQuery();
con.Close();

列C2增加1但其他列为空。如果我评论C2行TextBox1和3被添加到数据库。 有什么问题?

P.S。我不允许编辑数据库。我需要在ASP.NET代码中创建它。

2 个答案:

答案 0 :(得分:2)

可以在数据库端设置C2增量。不需要这些计算。

How can I make a primary key as AUTOINCREMENT

更新: 那你做错了。您正在更改命令:

com.Parameters.AddWithValue("@c2", com .CommandText = "declare @a float set @a = (select MAX(C2) from FJ)+1 INSERT INTO [FJ]([C2]) VALUES (@a)");

这就是其他列为空的原因。

它应该是:

SqlConnection con= new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString);
con.Open();

string db = "declare @a float; set @a = (select MAX(C2) from FJ)+1;instert into FJ(C1, C2, C3) values (@c1 , @a ,@c3)";
SqlCommand com = new SqlCommand(db, con);
com.Parameters.AddWithValue("@c1", TextBox1.Text);
com.Parameters.AddWithValue("@c3", TextBox3.Text);

com.ExecuteNonQuery();
con.Close();

答案 1 :(得分:0)

嗯,我遇到了类似的情况。

使用标识始终是一个很好的解决方案,但是,当INSERT操作失败时,它会丢失新生成的ID

展望您的T-SQL,我发现了一个问题:当两个操作在“相同”时间开始时会发生什么,即,当C2列的最后一个值为时,假设为10 ?将有两行具有11值,或者如果列具有unique index,则首先启动的INSERT将具有新值,而第二行将失败...这将导致我认为有几种损害赔偿。

我建议将INSERT语句更改为:

INSERT INTO FJ( C1, C2, C3 )
SELECT @c1, ISNULL( MAX( C2 ) + 1, 1 ), @c3
  FROM FJ;

这种方式会更安全。

见啊!