从多案例切换语句中获取用户选择

时间:2016-11-16 17:13:27

标签: c# switch-statement wizard-control

我正在使用向导控件让用户完成多个步骤。它们从步骤1开始,但如果他们回答是或否(单选按钮),有时会跳过一些步骤。例如,某些步骤结束时的问题是:"问题是否已修复?"并且有一个是或否有单选按钮选项。如果答案是肯定的,请将它们带到最后一步完成。如果答案是否定的,那么他们会转到下一步。

我的问题是从数据库中的表测试的所有步骤中获得结果。

        string constring = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ClientMonitorDevices"].ConnectionString;
        SqlConnection conn = new SqlConnection(constring);
        SqlCommand cmd = new SqlCommand();

        cmd = conn.CreateCommand();
        cmd.CommandText = @"INSERT INTO test (siteid, hotelname, step1, step2)
                            VALUES (@siteid, @hotelname, @step1, @step2)";

        cmd.Parameters.AddWithValue("@siteid", siteid);
        cmd.Parameters.AddWithValue("@hotelname", hotelname);

        int activeStep = Wizard1.ActiveStepIndex;

        switch (activeStep)
        {
            case 1:
                if (step1_yes.Checked)
                {
                    step1 = "Device Can Detect Network with a Signal Strength of 50% or Greater";
                    Wizard1.ActiveStepIndex = 2;
                }
                else if (step1_no.Checked)
                {
                    step1 = "Device Cannot Detect Network with a Signal Strength of 50% or Greater";
                    Wizard1.ActiveStepIndex = 16;
                }
                else
                {
                    e.Cancel = true;
                    gen.MessagBox(this.Page, "Please choose Yes or No", "Please choose Yes or No");
                }
                cmd.Parameters.AddWithValue("@step1", step1);
                break;
            case 2:
                if (step2_unable.Checked)
                {
                    step2 = "Unable to Join Network";
                    Wizard1.ActiveStepIndex = 3;
                }
                else if (step2_unidentified.Checked)
                {
                    step2 = "Connect to Unidentified Network";
                    Wizard1.ActiveStepIndex = 7;
                }
                else if (step2_internet.Checked)
                {
                    step2 = "Connected (Internet Access)";
                    Wizard1.ActiveStepIndex = 11;
                }
                else if (step2_local.Checked)
                {
                    step2 = "Connected Local Only (No Internet Access)";
                    Wizard1.ActiveStepIndex = 15;
                }
                else
                {
                    e.Cancel = true;
                    gen.MessagBox(this.Page, "Please Choose One of the Options", "Please Choose One of the Options");
                }
                cmd.Parameters.AddWithValue("@step2", step2);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                break;

我得到的错误是必须声明标量变量" @ step1"。因为step1超出范围或者我的想法。我尝试了一个存储过程但是也没有用。

另一种尝试是使用更新语句,但我遇到的问题是获取可索引的ID列(索引),并且每次插入时都会增加1。如果有人有任何想法,那么请告诉我。我已经在这方面工作了大约两个星期,但没有用。

1 个答案:

答案 0 :(得分:0)

问题是您的查询包含@step1参数,是在任何条件结构之外定义的(即switch块):

cmd.CommandText = @"INSERT INTO test (siteid, hotelname, step1, step2)
                    VALUES (@siteid, @hotelname, @step1, @step2)";

但是,您只在@step1交换机块中的一个中提供activeStep查询参数,而在另一个中@step2提供cmd.Parameters.AddWithValue("@step1", step1); cmd.Parameters.AddWithValue("@step2", step2); 查询参数一。查询本身需要两个参数。

您需要在两个最外层的语句中都包含这两行:

DBNull.Value

如果在任何一种情况下,另一个值都为null,则可以将该值设置为text