我在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代码中创建它。
答案 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;
这种方式会更安全。
见啊!