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

时间:2012-09-27 14:06:51

标签: asp.net c#-4.0 insert validation detailsview

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

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

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

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

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

我希望这是有道理的。

asp:DetailsView ID =“DetailsView1”runat =“server”         DataSourceID =“ObjectDataSource1”DataKeyNames =“bwrequestid”         高度=“29px”宽度=“928px”AutoGenerateRows =“False”CellPadding =“4”ForeColor =“#333333”         GridLines =“None”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;
            }
        }
    }

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

私有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;
            }
        }
    }

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

私有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 :(得分: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" >