首页 文章

检查数据库表中的值以查看新记录是否与现有记录冲突

提问于
浏览
1

我有一个包含多个字段的Detailsview,始终设置为插入模式 . 我想在用户插入新记录之前检查这些字段,以查看该用户是否已输入该日期的记录 .

我真的需要找到一种方法来检查多个要求,例如,如果请求的日期是假日,或者在同一日期已经有两个不同用户提出的不同请求(因为请求同一日期的人不能超过两个) . )

我无法使自定义验证器工作,因为我回拨的唯一时间是按下插入时 .

我想知道在按下插入时是否有任何方法可以检查不同的验证,但是如果全部通过则只能跟随插入?

我需要检查表中的多个列 . 用户标识和日期 .

我希望这是有道理的 .

asp:DetailsView ID =“DetailsView1”runat =“server”DataSourceID =“ObjectDataSource1”DataKeyNames =“bwrequestid”Height =“29px”Width =“928px”AutoGenerateRows =“False”CellPadding =“4”ForeColor =“#333333”GridLines =“无”Style =“margin-right:0px; text-align:left; margin-top:0px;” ondatabound =“DetailsView1_DataBound”oniteminserting =“EntValid_ItemInserting”

protected void EntValid_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
        {
            if (e.Values[i] != GetData())
            {
                e.Cancel = true;

                return;
            }
        }
    }

-------获取数据看起来像这样

private DataSet GetData(){ConnectionStringSettingsCollection cssc = ConfigurationManager.ConnectionStrings;

var sql = "SELECT LEAVETYPE, LEAVECODE FROM TEST.LVTYPE ORDER BY LEAVECODE";

        using (iDB2Connection conn = new iDB2Connection(GetConnectionString()))
        {
            conn.Open();

            using (iDB2Command cmd = new iDB2Command(sql, conn))
            {
                cmd.DeriveParameters();

                using (iDB2DataAdapter da = new iDB2DataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    return ds;
                }
            }
        }
    }

protected void EntValid_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
        {
            if (e.Values[i] != GetData())
            {
                e.Cancel = true;

                return;
            }
        }
    }

-------获取数据看起来像这样

private DataSet GetData(){ConnectionStringSettingsCollection cssc = ConfigurationManager.ConnectionStrings;

var sql = "SELECT LEAVETYPE, LEAVECODE FROM TEST.LVTYPE ORDER BY LEAVECODE";

        using (iDB2Connection conn = new iDB2Connection(GetConnectionString()))
        {
            conn.Open();

            using (iDB2Command cmd = new iDB2Command(sql, conn))
            {
                cmd.DeriveParameters();

                using (iDB2DataAdapter da = new iDB2DataAdapter(cmd))
                {
                    DataSet ds = new DataSet();
                    da.Fill(ds);

                    return ds;
                }
            }
        }

}

1 回答

  • 0

    我假设你只使用服务器端验证这是正确的吗?如果是这样(我建议服务器和客户端验证,但这不是重点)你需要的是首先处理Details视图的ItemInserting事件 .

    此时,您将拥有对记录的完全访问权限 . 有关详细信息,请参阅MSDN .

    在ItemInserting事件处理程序中,进行验证,如果失败,请使用e.Cancel = true;

    例如:

    void CustomerDetail_ItemInserting(object sender, 
        DetailsViewInsertEventArgs e)
    {
        for (int i = 0; i < e.Values.Count; i++)
        {
            if (e.Values[i] != *your validation here*)
            {
                e.Cancel = true;
    
                //set your validation summary message here
                ...
    
                return;
            }
        }
    }
    

    只是不要忘记挂钩这个处理程序:

    <asp:DetailsView ID="CustomerDetail" 
        DataSourceID="Details" AutoGenerateRows="false"
        *other properties*
        OnItemInserting="CustomerDetail_ItemInserting" >
    

相关问题