【问题标题】:Check Duplication With the database asp.net c#使用数据库 asp.net c# 检查重复
【发布时间】:2017-04-27 11:15:31
【问题描述】:

我有一个详细信息视图和一个按钮,当我单击按钮时,我想检查用户名是否已经在数据库中。我尝试了下面的代码,但它转到 else 语句,即使用户名存在。

有什么帮助吗?

protected void Button2_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    string query = "select Username from [Login]";

    SqlCommand cmd = new SqlCommand(query);

    SqlDataAdapter sqlda = new SqlDataAdapter(cmd.CommandText, con);
    DataTable dt = new DataTable();
    sqlda.Fill(dt);

    int RowCount = dt.Rows.Count;

    for (int i = 0; i < RowCount; i++)
    {
        Label13.Text = ((TextBox)DetailsView1.FindControl("TextBox1")).Text;
        Label14.Text = dt.Rows[i]["Username"].ToString();

        if (Label13.Text == Label14.Text)
        {
            string message = "Username is Already Exists";

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<script type = 'text/javascript'>");
            sb.Append("window.onload=function(){");
            sb.Append("alert('");
            sb.Append(message);
            sb.Append("')};");
            sb.Append("</script>");

            ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
        }
        else
        {
            string message = "Successfully saved";

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("<script type = 'text/javascript'>");
            sb.Append("window.onload=function(){");
            sb.Append("alert('");
            sb.Append(message);
            sb.Append("')};");
            sb.Append("</script>");

            ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
        }
    } 
}

详情视图标记:

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
        CellPadding="4" DataKeyNames="Username" DataSourceID="SqlDataSource3" 
           ForeColor="#333333" GridLines="None" Height="50px" Width="283px" 
            style="margin-top: 0px; text-align: left;" 
           onitemupdated="DetailsView1_ItemUpdated" onitemdeleted="DetailsView1_ItemDeleted" 
           oniteminserted="DetailsView1_ItemInserted" DefaultMode="Insert" 
           oniteminserting="DetailsView1_ItemInserting">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
        <EditRowStyle BackColor="#999999" />
        <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
        <Fields>
            <asp:TemplateField HeaderText="Username" SortExpression="Username">
                <EditItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Eval("Username") %>'></asp:Label>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Username") %>' 
                        ValidationGroup="1"></asp:TextBox>
                    <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" 
                        ErrorMessage="*" ControlToValidate="TextBox1" ForeColor="Red" 
                        ValidationGroup="1"></asp:RequiredFieldValidator>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Username") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Password" SortExpression="Password">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Password") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Password") %>' ValidationGroup="1"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
                        ControlToValidate="TextBox2" ErrorMessage="*" ForeColor="Red" 
                        ValidationGroup="1"></asp:RequiredFieldValidator>
                </InsertItemTemplate>
                <ItemTemplate>

                </ItemTemplate>
                <ControlStyle />
            </asp:TemplateField>
            <asp:TemplateField HeaderText="UserType" SortExpression="UserType">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("UserType") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:DropDownList ID="DropDownList4" runat="server" 
                        ConnectionString ="<%$ConnectionStrings: ConnectionString %>" 
                        SelectedValue='<%# Bind("UserType") %>' ValidationGroup="1">
                    <asp:ListItem>--Select--</asp:ListItem>
                    <asp:ListItem>employee</asp:ListItem>
                    <asp:ListItem>doctor</asp:ListItem>
                    <asp:ListItem>student</asp:ListItem>
                    </asp:DropDownList> 
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" 
                        ControlToValidate="DropDownList4" ErrorMessage="*" ForeColor="Red" 
                        InitialValue="--Select--" ValidationGroup="1"></asp:RequiredFieldValidator>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("UserType") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ButtonType="Button" ShowInsertButton="True" ValidationGroup="1" />
        </Fields>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    </asp:DetailsView>

【问题讨论】:

  • 你检查了dt.Rows[i]["Username"].ToString() 的值吗?放置调试器,并检查两个值。
  • 您的示例有很多与问题无关的代码。只需显示您尝试检查数据库中的值的方法。
  • 似乎在迭代数据时,您将最后一个和一个用户名存储在 Label14.Text 中。因此,它不会匹配。
  • 你为什么不这样做string query = "select Username from [Login] where Username ="+Label14.Text; 并且只获取那个特定的用户名而不是从 db 获取所有用户。
  • 您的代码很容易受到 SQL 注入攻击 - 使用参数化查询来防止这种情况:software-security.sans.org/developer-how-to/…

标签: c# asp.net sql-server detailsview


【解决方案1】:

为什么不将用户名作为参数传递给 Db。

  string query = "select Username from [Login] where Username=@username";
     var nameParam = new SqlParameter("username");
     nameParam.Value = Label13.Text;
     cmd.Parameters.Add(nameParam);

如果用户名存在于数据库中,它将仅获取记录。

然后使用 rowCount 检查它。

if(RowCount> 0){
    //Username exist
}else {
    //Do other work
}

【讨论】:

    【解决方案2】:

    请你试试这个方法。

    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
    string query = "select Username from [Login] WHERE Username='"+((TextBox)DetailsView1.FindControl("TextBox1")).Text+"'";
    
    SqlCommand cmd = new SqlCommand(query);
    SqlDataReader reader = cmd.ExecuteReader();
    if(reader.HasRows())
    {
    // The username exist
    }
    

    【讨论】:

    • 好的,我尝试了下面的代码,并使用按钮对其进行了测试,它工作正常,但我知道我想将它分配给 detailsview 的插入命令。我试图把它放在 DetailsView1_ItemInserting 中,但如果是 if 语句,它会给我带有 PK 重复的黄色错误页面,但如果 else 语句工作正常。有什么帮助吗??
    • SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); string query = "select Username from [Login] where Username = '" + ((TextBox)DetailsView1.FindControl("TextBox1")).Text + "'"; SqlCommand cmd = new SqlCommand(query, con); con.Open(); SqlDataReader dr = cmd.ExecuteReader();博士读(); if (dr.HasRows == true) { //此处有错误消息} else { //此处有成功消息} con.Close();
    猜你喜欢
    • 2015-07-02
    • 2013-04-25
    • 1970-01-01
    • 2012-08-29
    • 2014-03-19
    • 2018-05-29
    • 1970-01-01
    • 2016-12-06
    • 2018-12-11
    相关资源
    最近更新 更多