我在刷新时插入重复项时遇到问题。我们的团队在这里决定在sql中使用'if exists‘是阻止重复插入的最好方法。但是,如果参数设置为null怎么办?
string cmdText = " if (not exists(select * from table where field1 = @field1 and field2 = @field2 and field3 = @field3)) Insert into table(field1,field2,field3) Values(@field1,@field2,@field3)";
if (txtfield1.text != "")
cmd.Parameters.Add(new SqlParameter("@field1", txtfield1.text));
else
cmd.Parameters.Add(new SqlParameter("@ field1", DBNull.Value));
cmd.Parameters.Add(new SqlParameter("@field2", txtfield2));
cmd.Parameters.Add(new SqlParameter("@field3", txtfield3));当field1中存在空值时,这不起作用。
发布于 2009-11-04 23:29:21
您可以将字段包装在isnull或其他考虑到null的地方
isnull(field1, '') = isnull(@field1, '') and
isnull(field2, '') = isnull(@field2, '') and
isnull(field3, '') = isnull(@field, '')发布于 2009-11-04 23:33:25
减少数据库的负载并从根源上解决问题不是一个更好的主意吗?
通常,当你有一个处理自己提交的页面时,这种类型的错误就会发生,即表单动作属性指向它自己,所以当有人在他们发布了一些东西后点击刷新时,发布数据仍然是‘实时的’,并被发布回页面。
一种更好的方法是将数据提交给第二个对象,该对象处理插入,然后重定向到它来自的地方,重定向清除POST数据,您可以省去许多不必要的查询。
只有我的2c
发布于 2009-11-04 23:32:01
where field1 IS @field1是无效的语法
使用isnull()
所以:
string cmdText = " if (not exists(select * from table where isnull(field1, '') = isnull(@field1, '') ...https://stackoverflow.com/questions/1674518
复制相似问题