登录表单用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 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();
}