如何在网格视图中更新/插入时检查 uniq 约束

本文关键字:插入 检查 uniq 约束 更新 网格 视图 | 更新日期: 2023-09-27 18:33:11

>我有一个简单的网格视图和sqldatasource将数据绑定到网格视图,SqlDatabase我正在尝试为一列设置唯一约束,因此如果我添加新行或更新一行并且值已经存在,它将不会更新。

对于 Name 列,我设置 ->索引/键 ->新的 -> 选择的列名称 ->唯一键。

当它说已经存在时,我怎么能得到错误,在标签中?

谢谢

如何在网格视图中更新/插入时检查 uniq 约束

首先创建一个过程,如下所示:

Create PROCEDURE [dbo].[test]
( 
@myUniquecolumn as varchar(20),
@ID    as int
)
AS
DECLARE @ReturnValue int
IF EXISTS (SELECT myUniquecolumn FROM mytable WHERE myUniquecolumn=@myUniquecolumn)
BEGIN
-- if the value already exist return 1
SELECT @ReturnValue = 1;
RETURN @ReturnValue;
END
ELSE
BEGIN
update mytable set myUniquecolumn=@myUniquecolumn where ID=@ID
SELECT @ReturnValue = 0;
RETURN @ReturnValue;
END

然后在 SQL 数据源中进行更新,使用此过程。按照此公式了解如何将输出参数添加到 sql 数据源。

在 ASPX 之后,SQL 数据源应如下所示:

    <UpdateParameters>
        <asp:Parameter Name="myUniquecolumn" Type="String" />
        <asp:Parameter Name="ID" Type="Int32" />
        <asp:Parameter DbType="Int32" Direction="ReturnValue" Name="uniqtest" />
    </UpdateParameters>

然后在代码隐藏文件中使用以下代码。

protected void SqlDataSource1_Updated(object sender, SqlDataSourceStatusEventArgs e)
{
    int uniquecolumn= (int)e.Command.Parameters["@uniqtest"].Value;
  if (uniquecolumn == 0)
    {
        Label1.Text = "Success";
    }
    else
    {
        Label1.Text = "fail";
    }
  }

希望对我有帮助。 :)