【发布时间】: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