C# 使用asp.net制作报名表
每当新用户注册时,我都希望这样。C代码应该检查数据库表中的值是否存在同名用户。我使用sql server存储数据,并使用过程插入数据。我在表中使用了一个唯一的约束,如果存在同名的用户,它应该在屏幕上给出一条错误消息 程序C# 使用asp.net制作报名表,c#,asp.net,sql-server,C#,Asp.net,Sql Server,每当新用户注册时,我都希望这样。C代码应该检查数据库表中的值是否存在同名用户。我使用sql server存储数据,并使用过程插入数据。我在表中使用了一个唯一的约束,如果存在同名的用户,它应该在屏幕上给出一条错误消息 程序 CREATE PROCEDURE [dbo].[SigningIn] @UserName nvarchar(90), @Password nvarchar(90) AS insert into Signin(UserName,UserPassword) values
CREATE PROCEDURE [dbo].[SigningIn]
@UserName nvarchar(90),
@Password nvarchar(90)
AS
insert into Signin(UserName,UserPassword) values
(@UserName,@Password)
RETURN
C代码
if(user name doesn't exists)
var command = new SqlCommand("SigningIn", connection)
{
CommandType = CommandType.StoredProcedure
};
command.Parameters.AddWithValue("@UserName", UserNameBox.Text);
command.Parameters.AddWithValue("@Password", PasswordBox.Text);
command.ExecuteNonQuery();
connection.Close();
}
else
{
UserExists.Text = "User Already Exists";
}
Asp代码
<asp:Label CssClass="col-sm-6 control-label " ID="UserName" runat="server" Text="User name"></asp:Label>
<div class="col-sm-6 ">
<asp:TextBox CssClass="form-control" placeholder="Pick a user name" ID="UserNameBox" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator CssClass="validators" ID="UserValidator" runat="server" ErrorMessage="Field is Required" ForeColor="#FF3300" ControlToValidate="UserNameBox" SetFocusOnError="True" ClientIDMode="Static" Display="Dynamic" ViewStateMode="Enabled"></asp:RequiredFieldValidator>
</div></div></div>
<div class="form-horizontal ">
<div class="form-group ">
<asp:Label CssClass="col-sm-6 control-label " ID="Password" runat="server" Text="Password"></asp:Label>
<div class="col-sm-6 ">
<asp:TextBox CssClass="form-control" placeholder="Enter password" ID="PasswordBox" runat="server" TextMode="Password" ></asp:TextBox>
<asp:RequiredFieldValidator CssClass="validators" ID="passwordValidator" runat="server" ErrorMessage="Field is Required" ForeColor="#FF3300" ControlToValidate="PasswordBox" SetFocusOnError="True" ClientIDMode="Static" Display="Dynamic" ViewStateMode="Enabled"> </asp:RequiredFieldValidator>
</div></div></div>
<div class="form-horizontal ">
<div class="form-group ">
<asp:Label CssClass="col-sm-6 control-label " ID="ConfirmLabel" runat="server" Text="Confirm Password"></asp:Label>
<div class="col-sm-6 ">
<asp:TextBox CssClass="form-control" placeholder="Confirm Password" TextMode="Password" ID="ConfirmBox" runat="server"></asp:TextBox> <asp:Label ID="UserExists" CssClass="validators" runat="server" Text="" ></asp:Label>
<asp:RequiredFieldValidator CssClass="validators" ID="confirmValidator" runat="server" ErrorMessage="Field is required" ControlToValidate="ConfirmBox" SetFocusOnError="True" Display="Dynamic" ForeColor="Red"></asp:RequiredFieldValidator>
<asp:CompareValidator ID="comparePassword" CssClass="validators" runat="server" ErrorMessage="Password doesn't match" SetFocusOnError="True" ControlToCompare="PasswordBox" ControlToValidate="ConfirmBox" ForeColor="#FF3300"></asp:CompareValidator>
实际上,您可以直接从您的过程中设置条件,即仅在条件不存在时插入,如下所示:
CREATE PROCEDURE [dbo].[SigningIn]
@UserName nvarchar(90),
@Password nvarchar(90)
AS
BEGIN
IF NOT EXISTS(SELECT * FROM Signin WHERE UserName = @UserName)
BEGIN
INSERT INTO Signin(UserName,UserPassword) VALUES(@UserName,@Password);
END
END
或继续使用C代码:
using(SqlConnection connection = new SqlConnection(connString)){
connection.Open();
bool userNameExists = false;
var command =
new SqlCommand("SELECT COUNT(*) FROM Signin WHERE UserName = @UserName", connection);
command.Parameters.AddWithValue("@UserName",UserNameBox.Text.Trim();
userNameExists = (int)command.ExecuteScalar() > 0;
//if exists
if(userNameExists) {
UserExists.Text = "User Already Exists";
}else{
command = new SqlCommand("SigningIn", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@UserName", UserNameBox.Text);
command.Parameters.AddWithValue("@Password", PasswordBox.Text);
command.ExecuteNonQuery();
connection.Close();
}
因此,它不是一个代码编写服务。如果你有什么特别的问题,那就去问一下。实际上,我在查询中使用了文本框的直接值来进行检查操作。比如userName.text什么是executeScalar方法。我只知道ExecuteOnQuery和ExecuteReaderexecuting scalar value意味着只获取一个或一组值。如果不需要获取整个rowintcommand.ExecuteScalar>0的所有值,则此选项非常有用。为什么使用大于零,因为Sql命令SELECT COUNT*检查是否至少找到一个电子邮件地址。您也可以使用SELECT UserName FROM SIGN,但在查询ExecuteScalar时,您会检查找到的用户名,而不是计数。