我正在尝试使用以下4个字段创建一个简单的用户注册表单
现在我可以阻止用户在Sql数据库中输入重复的用户条目。但是,当用户提供相同的用户ID /用户名或“用户名/用户名不存在时,帐户创建成功”时,想要触发一个事件,该消息可以成功地向用户显示该帐户“已存在”。
请提供一些C#代码帮助(asp.net)来解决这个问题。 感谢。
答案 0 :(得分:2)
您是否只能使用将测试和插入用户的存储过程并返回带有结果的输出参数?
CREATE PROC addUser @UserID decimal, @Username varchar()..., @Result varchar(50) output
as
if exists(Select UserId from Users where username = @Username)
begin
set @Result = 'Already there'
return
end
insert Users ....
set @Result= 'Success'
答案 1 :(得分:1)
您可以在插入前处理检查。
要执行此操作,您可以使用OnItemInserting
事件和DetailsView
之类的事件,使用用户输入的值来检查用户名是否存在,如果存在,则取消插入。您可以使用OnItemInserted
事件确认之后的新帐户。
你一定要做额外的输入检查和检查值等,但下面只是伪代码,可以帮助你找到正确的方向。
看看这些例子 OnItemInserting http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.iteminserting.aspx
OnItemInserted http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.detailsview.iteminserted.aspx
示例(伪代码)
<asp:DetailsView ID="NewAccount" runat="server"
DataSourceID="Account"
AutoGenerateRows="false"
OnItemInserted="NewAccount_ItemInserted"
OnItemInserting="NewAccount_ItemInserting">
<Fields>
<asp:BoundField DataField="UserName" HeaderText="UserName" />
<asp:TemplateField HeaderText="Password">
<InsertItemTemplate>
<%-- Put your password boxes here --%>
</InsertItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Email" HeaderText="Email" />
</Fields>
</asp:DetailsView>
背后的代码
void NewAccount_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
{
// Account successfully inserted
PanelAccountSuccessful.Visible = true; // Show the successful message
}
void NewAccount_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
// Check for account that exists
SqlConnection ....
SqlDataSource ....
//use e.Values["key"] to compare
// select an account that matches e.Values["UserName"] and/or e.Values["Email"]
SqlDataReader reader ....
while (reader.read())
{
// If you returned results then the account exists
PanelAccountExists.Visible = true; // Show the error message that the account exists
e.Cancel = true; // This cancels the insert
}
// Otherwise this will fall through and do the insert
// Check that the passwords match and any other input sanitation you need
if (Password1.Text.Trim() != Password2.Text.Trim())
e.Cancel = true; // Cancel if passwords don't match
}