C# 如何将数据库的问题列分配给变量,以便将其分配给label3和Label4

C# 如何将数据库的问题列分配给变量,以便将其分配给label3和Label4,c#,asp.net,sql-server,C#,Asp.net,Sql Server,如何将数据库的问题列分配给变量,以便将其分配给label3和label4。请问,这里有人能帮我解决这个问题吗?因为我想做的是为存储在数据库中的两个答案分配一个问题。我已选择了select命令中所述的答案,但如何将这些答案的问题分配给标签3和标签4。谢谢你的帮助。因此,到目前为止,代码是工作没有错误,但我希望在上述几点帮助请。谢谢你的帮助。 如下图所示,我有Security1和Security2列。基本上,我想把它分配给一个标签,比如Label3.Text=Security1;Label4.Tex

如何将数据库的问题列分配给变量,以便将其分配给label3和label4。请问,这里有人能帮我解决这个问题吗?因为我想做的是为存储在数据库中的两个答案分配一个问题。我已选择了select命令中所述的答案,但如何将这些答案的问题分配给标签3和标签4。谢谢你的帮助。因此,到目前为止,代码是工作没有错误,但我希望在上述几点帮助请。谢谢你的帮助。 如下图所示,我有Security1和Security2列。基本上,我想把它分配给一个标签,比如Label3.Text=Security1;Label4.Text=Security2;
图像

您应该有
if
块,如下所示

if (reader != null &&  reader.HasRows)
{
    Label3.Text = reader.GetString("Security1");
    Label4.Text = reader.GetString("Security2");
    newpass.Visible = true;
    confpass.Visible = true;
    Label1.Text = "New Password";
    Label2.Text = "Confirm New Password";
    SqlConnection cons = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
    cons.Open();
    SqlCommand updates = new SqlCommand("update reg set Password='" + confpass.Text + "'", cons);
    SqlDataAdapter da = new SqlDataAdapter(updates);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    cons.Close();
    //ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Your password has been changed')</script>");
           // Response.Redirect("Default.aspx");
}
if(reader!=null&&reader.HasRows)
{
Label3.Text=reader.GetString(“Security1”);
Label4.Text=reader.GetString(“Security2”);
newpass.Visible=true;
confpass.Visible=true;
Label1.Text=“新密码”;
Label2.Text=“确认新密码”;
SqlConnection cons=新的SqlConnection(ConfigurationManager.ConnectionString[“conn”].ConnectionString);
cons.Open();
SqlCommand updates=new SqlCommand(“更新注册设置密码=”“+confpass.Text+”,cons);
SqlDataAdapter da=新的SqlDataAdapter(更新);
数据集ds=新数据集();
da.填充(ds);
con.Close();
cons.Close();
//RegisterStartupScript(Page.GetType(),“验证”,“警报('您的密码已更改'));
//重定向(“Default.aspx”);
}

此解决方案针对您的问题。我认为代码可以改进很多,但这取决于您的业务逻辑和需求。

将您的方法分为两部分:

首先,询问用户的姓名。当他输入姓名并单击按钮时,从数据库中获取相应的安全问题并将其分配给标签,例如
Label3.Text=reader(“Security1”).ToString()


第二步,让用户输入答案并使用现有代码进行测试。

我知道您在使用WebForms,首先您需要了解事情的工作原理:

  • 如果不知道用户名,您就无法知道安全问题,这意味着您有两种选择:
    • 一页上有两个按钮
    • 重定向到另一页 无论哪种方式,您都将发送包含用户名的POST或GET参数
  • 第一个案例通知-WebForms不喜欢一个页面上有两个表单,您必须将答案分开并通过ID获取它们,然后在第二个按钮上添加一个onClick事件来处理数据的实际更新

    然后您将通过
    Request.Form['username']
    获取它,其中username是表单中定义的键

    获取后,您使用给定的用户名执行阅读器,然后通过
    reader.GetString(“Security1”)
    在数据库中显示问题,现在您可以获取输入并将其传递给更新按钮的onClick侦听器(如果您选择了选项2-表单上的onsubmit事件,则另一种方式)

  • 以明文格式保存密码甚至安全答案是非常糟糕的,即使是安全答案,google关于,本质上你要做的是将散列存储在数据库中,并将用户输入与数据库中的散列进行比较(相同的输入将产生相同的散列)(在某些算法中不会,因为它使用了salt,而且这些算法已经内置了比较函数,因此您不必手动进行比较))
  • 因此,您的html应该如下所示:

    <form runat="server">
        <input type="text" name="username" />
        <asp:Button PostBackUrl="~/postbackurl.aspx" runat="server" Text="Submit" />
    </form>
    

    您还可以添加所需结果的UI屏幕截图吗?您可以提供更多信息吗?数据库表是什么样子的?业务用例是什么?您提供的代码正在填充SqlDataReader,但没有在任何地方使用它?您正在选择数据,但没有在任何地方使用它。如果您的SELECT查询从db t返回问题列然后,您可以通过
    Label3.Text=reader.GetString()和
    Label4.Text=reader.GetString()将它们的值设置为if循环中的标签
    。在占位符中使用适当的列名。我在上面的图像中添加了一些说明。错误1“reader”是一个“变量”,但像“方法”一样使用C:\Users\samsung\Desktop\Sogftware worksheets\1\WebApplication1\WebApplication1\Forget.aspx.cs 30 27 WebApplication1这是我得到的错误
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            // Fetching code here
            // ...
            cmd.Parameters.AddWithValue("@username", Request.Form["username"]);
            // ...
            Label3.Text = reader.GetString("Security1");
        }
    }