C# 如何在asp.net中单击“上一步”按钮时插入非重复值

C# 如何在asp.net中单击“上一步”按钮时插入非重复值,c#,asp.net,C#,Asp.net,我已经在asp.NETC中创建了在线考试应用程序web。在我的申请中 第一个表单包含以下内容的下拉列表: 测试&启动按钮 当我从下拉列表中选择一个特定的测试,然后单击开始按钮,它将进入下一页 此页面包含一个标签,用于 问题,无线电按钮列表 答案,下一步和上一步按钮 在第一种形式:开始按钮的点击事件中,我为问题ID创建了非重复的随机值,即存储在数组中。 当它重定向到另一个页面时,该数组中的第一个问题将显示答案&单击“下一步”按钮后,将显示下一个问题,在这里,我在数据库中插入了用户在radiobut

我已经在asp.NETC中创建了在线考试应用程序web。在我的申请中

第一个表单包含以下内容的下拉列表: 测试&启动按钮

当我从下拉列表中选择一个特定的测试,然后单击开始按钮,它将进入下一页

此页面包含一个标签,用于 问题,无线电按钮列表 答案,下一步和上一步按钮

在第一种形式:开始按钮的点击事件中,我为问题ID创建了非重复的随机值,即存储在数组中。 当它重定向到另一个页面时,该数组中的第一个问题将显示答案&单击“下一步”按钮后,将显示下一个问题,在这里,我在数据库中插入了用户在radiobuttonlist中选择的选定值以计算分数。问题是,单击“上一个”按钮,然后选择另一个答案,然后再次插入记录,因为我想更新该值,而不是重复的值。我已经为此编写了以下代码,但它不起作用。这里

if (result != DBNull.Value)

此条件无法正常工作,因为我要检查值是否存在

请帮帮我

 if (Convert.ToInt32(Session["Counter"]) <= 7)
        {
            //a is the array of random values where Counter is my counter start value=1
            SqlCommand cmd = new SqlCommand("SELECT selected from Sel_Ans WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn);
            sqlconn.Open();
            var result = cmd.ExecuteScalar();
            if (result != DBNull.Value)
            {
                cmd = new SqlCommand("Update Sel_Ans Set Selected=@Selected WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn);
                SqlParameter Selected = cmd.Parameters.Add("@Selected", SqlDbType.Int, 50);

                Selected.Value = rb;
                sqlconn.Close();
                sqlconn.Open();
                cmd.ExecuteNonQuery();
                sqlconn.Close();

            }
            else
            {
                int t = Convert.ToInt32(Session["Counter"]);

                cmd = new SqlCommand("INSERT INTO Sel_Ans VALUES ('1', @Quid, @Selected, '1')", sqlconn);
                SqlParameter Quid = cmd.Parameters.Add("@Quid", SqlDbType.Int, 50);
                Quid.Value = a[t - 2];

                SqlParameter Selected = cmd.Parameters.Add("@Selected", SqlDbType.Int, 50);
                Selected.Value = rb;
                sqlconn.Close();
                sqlconn.Open();
                cmd.ExecuteNonQuery();
                sqlconn.Close();
            }
            sqlconn.Close();
        }

结果应该表明它是否插入新记录或不插入重复键,如果不是,则更新记录

编辑:


结果应该表明它是否插入新记录或不插入重复键,如果不是,则更新记录

编辑:



此条件无法正常工作,因为我想检查值是否存在??您的意思是什么,如果结果是!=DBNull.Value是否包含代码??我希望插入选定的值,但如果该值已存在,则应进行更新,而不是在调试时插入新值结果的值是什么?从理论上讲,这张支票应该是可以接受的。就我个人而言,虽然我刚刚做了类似的事情,但我将更新/插入放在了一个执行检查的存储过程中。它给出了结果的真值,但它应该是假的,因为我的表中没有记录,这意味着它应该插入该值。这个条件不能正确工作,因为我想检查该值是否存在??你的意思是,如果结果如何!=DBNull.Value是否包含代码??我希望插入选定的值,但如果该值已存在,则应进行更新,而不是在调试时插入新值结果的值是什么?从理论上讲,这张支票应该是可以接受的。就我个人而言,虽然我刚刚做了类似的事情,但我将更新/插入放在了一个执行检查的存储过程中。它给出了结果的真实值,但它应该是假的,因为我的表中没有记录,这意味着它应该插入该值,但它不会发生,它转到true condition update语句,而应该转到else insert语句。我假设您的表有一个主键。因此,默认情况下,如果记录已插入主键冲突,则插入新记录并将效果存储在结果变量中,然后它将更新。当我分配主键时,它不起作用,因为当我单击“上一步”并选择“新答案”时,它会插入该问题的新记录。选定的值应在此处更新。这就是我检查该值是否存在的原因。如果存在,则更新该值,如果不存在,则插入这些值。最初,我将该表保留为空白,因为我最终通过了删除查询,所以当我运行项目时,该表为空白。问题是,这段代码用新选择的答案为问题ID插入了新的记录,所以我如何解决这个问题我想你在数据库设计中遇到了一些问题。你可以采取以下任何方法:在我的答案中编辑。count*将给出总值,但我如何在这里找到该值是否存在我的表域有字段:Tid,qid、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、selectedans、marks、per Questions但它没有发生,它会转到。因此,默认情况下,如果记录已插入主键冲突,则插入新记录并将效果存储在结果变量中,然后它将更新。当我分配主键时,它不起作用,因为当我单击“上一步”并选择“新答案”时,它会插入该问题的新记录。选定的值应在此处更新。这就是我检查该值是否存在的原因。如果存在,则更新该值,如果不存在,则插入这些值。最初,我将该表保留为空白,因为我最终通过了删除查询,所以当我运行项目时,该表为空白。问题是,这段代码为问题ID插入了新的记录和新的选定答案,因此我如何解决此问题我认为您在数据库设计中遇到了一些问题。您可以通过任何方式执行以下操作:在我的答案中编辑。count*将给出总值,但我如何在此处找到 lue存在与否我的表区域具有以下字段:Tid、qid、用户选择的selectedans和每个问题的标记
 SqlCommand cmd = new SqlCommand("SELECT Count(*)from Sel_Ans WHERE Quid=" + a[Convert.ToInt32(Session["Counter"]) - 1] + "", sqlconn);

            sqlconn.Open();
            int result = cmd.ExecuteScalar();
            if (result != 0)