登录表单用SQL Server数据库在asp.net (c#)中编写

本文关键字:net asp 表单 SQL Server 数据库 登录 | 更新日期: 2023-09-27 18:02:21

我试图在ASP.net中创建一个登录系统。它没有显示错误,但仍然不能工作。

这是代码:

SqlConnection connectionstring = new SqlConnection("Server=.''SQLEXPRESS;Database=TestDB;User Id=AMS; Password = password; ");
public void LoadData() //<-- call this when the button is pressed
{
    try
    {
        SqlCommand SelectCommand = new SqlCommand("SELECT `Username`, `Password` FROM `LoginData` WHERE `Username` = '" + TextBox1.Text + "' AND `Password` = '" + TextBox2.Text + "'", connectionstring);
        SqlDataReader myReader;
        connectionstring.Open();
        myReader = SelectCommand.ExecuteReader();
        int count = 0;
        while (myReader.Read())
        {
            count = count + 1;
        }
        if (count == 1)
        {
            string script = "alert('"Login successful!'");";
            ScriptManager.RegisterStartupScript(this, GetType(),"ServerControlScript", script, true);
            connectionstring.Close();
        }
        else if (count == 0)
        {
            string script = "alert('"Login Failed!'");";
            ScriptManager.RegisterStartupScript(this, GetType(),"ServerControlScript", script, true);
            connectionstring.Close();
        }
        else
        {
        }
    }
    catch (Exception ex)
    {
        connectionstring.Close();
    }
}

它根本不起作用。我不知道为什么。

这是CSS中按钮的代码
#Button1{
background-color: #0066CC;
 font-family: 'Segoe UI',Tahoma,Arial,Helvetica,sans-serif;
margin-right: 10px;
cursor: pointer;
color: #fff;
padding: 10px 15px;
font-size: 14px;
display: inline-block;
margin-bottom: 18px;
z-index: 1;
position: absolute;
top: 203px;
left: 383px;
width: 130px;
}

,这是在asp.net

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

它没有显示错误或任何东西,只是在我单击按钮时刷新页面。有什么问题吗?我找不到它。也许是在SQL连接字符串?

编辑:Steve建议去掉try/catch

这是我得到的错误

类型为"System.Data.SqlClient"的异常。在System.Data.dll中发生了SqlException',但未在用户代码中处理

附加信息:在建立到SQL Server的连接时发生了与网络相关或特定于实例的错误。未找到服务器或无法访问服务器。验证实例名是否正确,并且SQL

登录表单用SQL Server数据库在asp.net (c#)中编写

修复了由Sql Server Express的无效配置(可能所需的协议未启用(TCP))引起的错误后,您还应该注意到Sql Server在字段名和表名周围不使用反引号。如果需要区分字段名和保留字,Sql Server将使用方括号。

说你的代码应该重写为使用参数而不是字符串连接。众所周知,字符串连接是构建查询的一种错误方式,因为它很容易引入错误并允许Sql注入攻击

public void LoadData() 
{
    string cmdText = @"SELECT 1 FROM LoginData 
                       WHERE Username = @name AND AND Password = @pass";
    using(SqlConnection cnn = new SqlConnection("Server=.''SQLEXPRESS;Database=TestDB;Trusted_Connection=True;"))
    using(SqlCommand SelectCommand = new SqlCommand(cmdText, cnn))
    {
       SelectCommand.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox1.Text;
       SelectCommand.Parameters.Add("@pass", SqlDbType.NVarChar).Value = TextBox2.Text;
       cnn.Open();
       using(myReader = SelectCommand.ExecuteReader())
       {
           // No need to read anything. If your reader has rows then
           // the user and its password exists 
           // (you don't allow two users have the same name right?)
           if(myReader.HasRows)
           {
             string script = "alert('"Login successful!'");";
             ScriptManager.RegisterStartupScript(this, GetType(),"ServerControlScript", script, true);
           }
           else
           {
              string script = "alert('"Login Failed!'");";
              ScriptManager.RegisterStartupScript(this, GetType(),"ServerControlScript", script, true);
           }
      }         
   }
}

请注意,我在一次性对象周围使用了using语句,以确保这些对象在出现异常的情况下也被关闭和处置。

另一个要做的事情是使用TrustedConnection=True对数据库服务器使用Windows身份验证,而不需要特定的用户登录。当然,如果您需要将您的程序部署到客户pc上,这将根据客户的需求进行更改。

我想你的问题是OnClick="Button1_Click"。你确定你已经调用了LoadData方法(在Button1_Click事件中,也许)?

可能是SqlConnection抛出的异常。给catch添加消息:

catch (Exception ex)
{
    string script = String.Format("alert('Error occured creating user. Exception message: {0}');", ex.Message);
    ScriptManager.RegisterStartupScript(this, GetType(),"ServerControlScript", script, true);
    connectionstring.Close();
}