C# 使用asp.net制作报名表

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

每当新用户注册时,我都希望这样。C代码应该检查数据库表中的值是否存在同名用户。我使用sql server存储数据,并使用过程插入数据。我在表中使用了一个唯一的约束,如果存在同名的用户,它应该在屏幕上给出一条错误消息

程序

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时,您会检查找到的用户名,而不是计数。