我正在使用向导控件让用户完成多个步骤。它们从步骤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。如果有人有任何想法,那么请告诉我。我已经在这方面工作了大约两个星期,但没有用。
答案 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
。